return
result;
}
}
Lu ng th c hi n c a ch
ng trình này cũng gi ng v i
ồ
ự
ệ ủ
ươ
ố
ớ
countdown
trong M c 4.8. N u ta kích
ụ
ế
ho t
ạ
factorial
v i giá tr 3:
ớ
ị
Vì 3 khác 0 nên ta ch n nhánh th hai và tính giai th a c a
ọ
ứ
ừ ủ
n-1
…
Vì 2 khác 0 nên ta ch n nhánh th hai và tính giai th a c a
ọ
ứ
ừ ủ
n-1
…
Vì 1 khác 0 nên ta ch n nhánh th hai và tính giai th a c a
ọ
ứ
ừ ủ
n-1
…
Vì 0 b ng
ằ 0 nên ta ch n nhánh th nh t và tr l i giá tr 1 và không g i đ quy thêm l n nào n a.
ọ
ứ
ấ
ả ạ
ị
ọ ệ
ầ
ữ
Giá tr đ
c tr v , 1, đ
c nhân v i
ị ượ
ả ề
ượ
ớ n, v n b ng 1, và k t qu đ c tr l i.
ố
ằ
ế
ả ượ
ả ạ
Giá tr đ
c tr v (1) đ
c nhân v i
ị ượ
ả ề
ượ
ớ n, v n b ng 2, và k t qu đ c tr l i.
ố
ằ
ế
ả ượ
ả ạ
Giá tr đ
c tr v (2) đ
c nhân v i
ị ượ
ả ề
ượ
ớ n, v n b ng 3, và k t qu , 6 tr thành giá tr tr v c a hàm ng
ố
ằ
ế
ả
ở
ị ả ề ủ
ứ
v i lúc b t đ u g i đ quy.
ớ
ắ ầ
ọ ệ
Sau đây là n i dung c a bi u đ ngăn x p khi m t lo t các ph
ng th c đ
c kích ho t:
ộ
ủ
ể
ồ
ế
ộ
ạ
ươ
ứ ượ
ạ
Các giá tr tr l i nh đây đ
c chuy n v ngăn x p.
ị ả ạ
ư ở
ượ
ể
ề
ế
L u ý r ng khung cu i cùng, các bi n đ a ph
ng
ư
ằ
ở
ố
ế
ị
ươ
recurse
và
result
đ u không t n t i, vì
ề
ồ ạ
khi n=0, nhánh t o ra chúng không đ
c th c hi n.
ạ
ượ
ự
ệ
6.9 Ni m tin
ề
Vi c dõi theo lu ng th c hi n c a ch
ng trình là m t cách đ c mã l nh, nh ng b n s nhanh chóng l c
ệ
ồ
ự
ệ ủ
ươ
ộ
ọ
ệ
ư
ạ ẽ
ạ
vào mê cung. M t cách làm khác mà tôi g i là “ni m tin” nh sau. Khi b n dò đ n ch kích ho t ph
ng
ộ
ọ
ề
ư
ạ
ế
ỗ
ạ
ươ
th c, thay vì vi c đi theo lu ng th c hi n, hãy
ứ
ệ
ồ
ự
ệ
coi nh
ư là ph ng th c đó ho t đ ng t t và tr l i k t qu
ươ
ứ
ạ ộ
ố
ả ạ ế
ả
đúng.
Th t ra, b n đã t ng có “ni m tin” này khi dùng các ph
ng th c c a Java. M i l n kích
ậ
ạ
ừ
ề
ươ
ứ ủ
ỗ ầ
ho t
ạ
Math.cos
hay
System.out.println
, b n không ki m tra n i dung bên trong các ph
ng th c
ạ
ể
ộ
ươ
ứ
này. B n ch vi c gi s r ng chúng ho t đ ng đ
c.
ạ
ỉ ệ
ả ử ằ
ạ ộ
ượ
Cũng v i lý l t
ng t khi b n kích ho t các ph
ng th c do mình vi t nên. Ch ng h n, trong M c 6.7,
ớ
ẽ ươ
ự
ạ
ạ
ươ
ứ
ế
ẳ
ạ
ụ
chúng ta đã vi t m t hàm tên là
ế
ộ
isSingleDigit
đ xác đ nh xem m t s có n m trong kho ng t 0 đ n
ể
ị
ộ ố
ằ
ả
ừ
ế
9 hay không. M t khi chúng ta t thuy t ph c r ng ph
ng th c này đã vi t đúng—b ng cách ki m tra
ộ
ự
ế
ụ ằ
ươ
ứ
ế
ằ
ể