theo cách b t kì, mi n là h p lý. Ý t
ng này đ
c
ấ
ễ
ợ
ưở
ượ Alonzo Church và Alan Turing phát tri n, b i v y nó
ể
ở ậ
còn mang tên lu n án Church-Turing. B n có th đ c thêm thông tin
ậ
ạ
ể ọ
ởhttp://en.wikipedia.org/wiki/Turing_thesis.
Đ c th hoá tác d ng c a nh ng ki n th c l p trình mà b n v a đ
c h c, chúng ta hãy cùng l p m t
ể ụ ể
ụ
ủ
ữ
ế
ứ ậ
ạ
ừ
ượ ọ
ậ
ộ
s hàm toán h c theo cách đ quy. M t đ nh nghĩa đ quy gi ng nh vi c đ nh nghĩa vòng quanh; đi m
ố
ọ
ệ
ộ ị
ệ
ố
ư ệ ị
ể
t
ng đ ng là trong ph n đ nh nghĩa l i có tham chi u đ n s v t đ
c đ nh nghĩa. Nh ng cách đ nh
ươ
ồ
ầ
ị
ạ
ế
ế ự ậ ượ ị
ư
ị
nghĩa vòng quanh th c s thì không m y có tác d ng:
ự ự
ấ
ụ
đ quy:
ệ
m t tính t đ ch m t ph ng th c mang tính đ quy.
ộ
ừ ể ỉ ộ
ươ
ứ
ệ
B n h n s b c mình khi th y m t đ nh nghĩa ki u nh v y trong cu n t đi n. Ng
c l i, khi b n xem
ạ
ẳ ẽ ự
ấ
ộ ị
ể
ư ậ
ố ừ ể
ượ ạ
ạ
đ nh nghĩa v hàm
ị
ề
giai th a
ừ trong toán h c, có th b n s th y:
ọ
ể ạ ẽ ấ
0! = 1
n! = n ·(n−1)!
(Giai th a th
ng đ
c kí hi u b i d u !, xin đ ng nh m v i toán t logic
ừ
ườ
ượ
ệ
ở ấ
ừ
ầ
ớ
ử
! v i ý nghĩa NOT.) Đ nh
ớ
ị
nghĩa này phát bi u r ng giai th a c a 0 là 1, và giai th a c a b t kì m t giá tr nào khác,
ể ằ
ừ ủ
ừ ủ
ấ
ộ
ị
n, thì
b ng
ằ n nhân v i giai th a c a
ớ
ừ ủ n - 1.
Theo đó, 3! b ng 3 nhân v i
ằ
ớ 2!, v n l i b ng 2 nhân v i
ố ạ ằ
ớ 1!, v n b ng
ố
ằ
1 nhân v i
ớ 0!. G p t t c l i, ta có
ộ ấ ả ạ
3! b ng 3 nhân 2 nhân 1 nhân 1, t c là b ng 6.
ằ
ứ
ằ
N u b n có th phát bi u m t đ nh nghĩa có tính đ quy cho m t hàm nào đó thì b n cũng có th vi t
ế
ạ
ể
ể
ộ ị
ệ
ộ
ạ
ể ế
m t ph
ng th c Java đ tính nó. B
c đ u tiên là xác đ nh các tham s và ki u d li u c a giá tr tr
ộ
ươ
ứ
ể
ướ ầ
ị
ố
ể
ữ ệ ủ
ị ả
l i. Vì giai th a đ
c đ nh nghĩa cho các s nguyên, nên ph
ng th c c n vi t s nh n tham s là s
ạ
ừ
ượ ị
ố
ươ
ứ ầ
ế ẽ
ậ
ố
ố
nguyên r i tr l i cũng m t s nguyên:
ồ
ả ạ
ộ ố
public static int
factorial(
int
n) {
}
N u đ i s b ng 0, chúng ta ch c n tr l i giá tr 1:
ế
ố ố ằ
ỉ ầ
ả ạ
ị
public static int
factorial(
int
n) {
if
(n == 0) {
return
1;
}
}
Đó là tr
ng h p c s .
ườ
ợ ơ ở
N u đi u đó không x y ra (đây chính là ph n hay nh t), chúng ta th c hi n l i g i đ quy đ tính giai
ế
ề
ả
ầ
ấ
ự
ệ ờ ọ ệ
ể
th a c a
ừ ủ n - 1
và sau đó nhân nó v i
ớ n.
public static int
factorial(
int
n) {
if
(n == 0) {
return
1;
}
else
{
int
recurse = factorial(n-1);
int
result = n * recurse;