|
|
Problemi
|
|
Problemi
Rekurzija
Naloga:
Navkljub različnosti:
Rekurzija
Po računalniško:
Postopek, ki je definiran (določen, opisan) sam s sabo.
Rekurzija
ustavitveni pogoj:
Rekurzija
Naloga:
Splošni algoritem:
Sicer pa
Faktoriela
Zelo hitro naraščajoča zadeva
3! = 3 * 2!
Faktoriela - postopek
Faktoriela
public static int Faktoriela(int n) {
if (n == 1) return 1;
else {
int pom = Faktoriela(n-1);
return n * pom;
}
| System.Console.WriteLine("4! = " + Faktoriela(4)); |
Faktoriela
Rekurzivno reševanje faktoriele
y
y
y
if (n == 1) return y;
else {
pom = Pot(y, n / 2);
if (n % 2 == 0){
return pom * pom;
}
else {
return y * pom * pom;
}
}
Hanoiski stolpiči
Problem Hanoiskih stolpičev:
Hanoiski stolpiči
|
|
Hanoiski stolpiči -ideja
prestavi n-1 obročev z A na B (s pomočjo C)
Hanoiski stolpiči -ideja
Daj obroč z A na C
Prestavi n –1 obročev z B na C (s pomočjo A)
Hanoiski stolpiči
Preloži n obročev z A na C s pomočjo B
Hanoiski stolpiči
Preloži n obročev z A na C s pomočjo B
Če je n = 1 potem daj obroč z A na C
sicer pa
Preloži n-1 obročev z A na B s pomočjo C
Daj obroč z A na C
Preloži n-1 obročev z B na C s pomočjo A
Hanoiski stolpiči
public static void Hanoi(int n, char st1,
char st2,char st3) {
if (n == 1) {
System.Console.WriteLine("Prelozi z " + st1
+ " na " + st3);
}
else {
Hanoi(n-1, st1, st3, st2);
System. Console.WriteLine("Prelozi z " + st1
+ " na " + st3);
Hanoi(n-1, st2, st1, st3);
}
}
Hanoi
hanoi(3, "A", "B", "C")
hanoi(2, "A", "C", "B")
hanoi(1, "A", "B", "C")
izpis: Prelozi z A na C
izpis: Prelozi z A na B
hanoi(1, "C", "A", "B")
izpis: Prelozi z C na B
izpis: Prelozi z A na C
hanoi(2, "B", "A", "C")
hanoi(1, "B", "C", "A")
izpis: Prelozi z B na A
izpis: Prelozi z B na C
hanoi(1, "A", "B", "C")
izpis: Prelozi z A na C