Professional Documents
Culture Documents
1
Nhұn diӋn kӻ thuұt đӋ quy
Mӝt phương thӭc đang sӱ dөng kӻ thuұt đӋ
quy khi
± Nó gӑi lҥi chính nó (vӟi đӝ phӭc tҥp thҩp hơn)
đưӧc gӑi là đӋ quy trӵc tiӃp
± Nó gӑi lҥi phương thӭc khác nhưng trong
phương thӭc khác đó lҥi gӑi lҥi chính nó đưӧc
gӑi là đӋ quy gián tiӃp
a
ng thӭc đӋ quy
ĐӇ xây dӵng 1 phương thӭc dùng kӻ đӋ quy
trưӟc tiên phҧi tӗn tҥi mӝt cng thӭc đӋ quy
cho giҧi pháp cҫn giҧi.
Mӝt cng thӭc đӋ quy phҧi có a phҫn
± Phҫn base case
± Phҫn recursive case
Ä
Tính S(N)
S=1+a+Ä++5+«+N
S(N) = 1+a+Ä+«+N
= 1+a+«+ (N ± 1) + N
= S(N-1) + N
a
Tính giai thӯa
=*Ä*a*1
n = n * (n-1) * « * 1
=*Ä
n = n * (n-1)
10
Dãy sӕ Fibonacci
int Fib(int n){
int fib1=1,fib0=0, fibn, i;
if(n<=1)
return n;
else{
for(i=a;i<=n;i++) {
fibn=fib1+fib0;
fib0=fib1;
fib1=fibn;
}
return fibn;
}
}
11
Dãy sӕ Fibonacci
int Fib(int n){ 5
Fib(5)
if(n<=1) Ä a
return n; Fib(Ä)
Fib()
else a 1 1
1
return (Fib(n-1)+Fib(n-a)); Fib(Ä) Fib(a) Fib(a) Fib(1)
0
} 1 1 1 1 0
Fib(a) Fib(1) Fib(1) Fib(0) Fib(1) Fib(0)
0
1
Fib(1) Fib(0)
1a
һp và ĐӋ quy
һp phù hӧp vӟi xӱ lý cӫa PU và các giҧi
pháp tӕi ưu khác.
ĐӋ quy rҩt phù hӧp cho các giҧi pháp mang
tính chҩt đӋ quy
ĐӋ quy bӏ hҥn chӃ bӣi ngn ngӳ hơn so vӟi
һp.
ĐӋ quy æ һp dùng Stack hoһc һp
1Ä
Tháp Hà Nӝi
Mөc đích: Di chuyӇn tҩt cҧ đĩa tӯ cӝt A
sang cӝt B
Quy tҳc:
± Khng có đĩa lӟn nào trên đĩa nhӓ tҥi mӑi thӡi
gian
± Mӛi lҫn chӍ di chuyӇn đưӧc 1 đĩa
A B
disks
1
Tháp Hà Nӝi
1 đĩa di chuyӇn tӯ A sang : Đơn giҧn
a đĩa di chuyӇn tӯ A sang như sau:
A B
1 a Ä
a đĩa
15
N đĩa tӯ A đӃn ?
1. Di chuyӇn n-1 đĩa tӯ A đӃn B
a. Di chuyӇn đĩa thӭ n tӯ A đӃn
Ä. Di chuyӇn n-1 đĩa tӯ B đӃn
1 Ä
A B
n-1 đĩa
a
đĩa n
1a
Tháp Hà Nӝi
void move(int n, char A, char , char B){
if(n==1)
System.out.println(³Di chuyӇn tӯ ´+A+³ đӃn ´+ );
else{
move(n-1,A,B, );
System.out.println(³Di chuyӇn tӯ ´+A+ ³ đӃn ´+ );
move(n-1,B, ,A);
}
}
1ë
KӃt quҧ khi di chuyӇn Ä đĩa
È
È
È
È È
È È
È
È È
È È
È
È
È È
È
È
È È
1ã
KӃt quҧ di chuyӇn đĩa
A B
1ú
-disk Example
A B
a0
-disk Example
A B
a1
Tam giác Pascal
n=0 : 1
n=1 : 1 1
n=a : 1 a 1
n=Ä : 1 Ä Ä 1
n= : 1 a 1
n=5 : 1 5 10 10 5 1
Nhұp n ?
aa
Tam giác Pascal
int[] pascal(int n)
± NӃu n = 0 : [1]
± NӃu n > 0 :
int[] temp = pascal(n-1);
int[] result = int[n + 1];
for(int i = 1; i < n; i++)
result[i] = temp[i]*temp[i-1];
result[0] = 1;
result[n] = 1;
return result;
aÄ