THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 52

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;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.