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

}

else

{

return

findBisect(cards, card, mid+1, high);

}

}

Tôi đã b sung m t l nh in đ có th theo dõi đ

c m t lo t nh ng l n kích ho t đ quy. Tôi đã th

ộ ệ

ượ

ạ ệ

đo n mã sau:

Card card1 =

new

Card(1, 11);

System.out.println(findBisect(cards, card1, 0, 51));

và nh n đ

c k t qu d

i đây:

ượ ế

ả ướ

0, 51

0, 24

13, 24

19, 24

22, 24

23

Sau đó tôi l p m t lá bài không có trong c (15 Rô), và th c tìm nó. Tôi đã nh n đ

c k t qu :

ử ố

ượ ế

0, 51

0, 24

13, 24

13, 17

13, 14

13, 12

-1

Nh ng phép th này không ch ng minh đ

c r ng ch

ng trình đúng đ n. Th c t là bao nhiêu ki m

ượ ằ

ươ

ự ế

th cũng không th ch ng minh đ

c tính đúng đ n nói trên. Song qua vi c xem xét m t vài tr

ng

ể ứ

ượ

ườ

h p và ki m tra mã l nh, b n có th t thuy t ph c b n thân.

ể ự

ế

ụ ả

S l n kích ho t đ quy th

ng t 6 đ n 7, vì v y ta ch kích ho t

ố ầ

ạ ệ

ườ

ế

ạ compareCard có 6 ho c 7 l n thôi, so

v i t n 52 l n n u tìm ki m tuy n tính. Nói chung, phép chia đôi thì nhanh h n nhi u so v i tìm ki m

ớ ậ

ế

ế

ế

ơ

ế

tuy n tính, và cò nhanh n a v i các m ng l n.

ế

ữ ớ

Có hai l i th

ng g p trong ch

ng trình đ quy, đó là quên đ a vào tr

ng h p c s và vi t l i g i đ

ườ

ươ

ư

ườ

ợ ơ ở

ế ờ ọ ệ

quy song không bao gi d n đ n tr

ng h p c s . L i sai nào cũng d n đ n đ quy vô h n, và bi t

ờ ẫ

ế

ườ

ợ ơ ở ỗ

ế

l

ệ StackOverflowException s đ c phát ra. (Hãy hình dung m t s đ ngăn x p cho m t ph ng th c

ẽ ượ

ộ ơ ồ

ế

ươ

đ quy không bao gi k t thúc.)

ờ ế

13.9 C bài và c bài con

Sau đây là nguyên m u (xem M c

ụ 8.5) c a

ủ findBisect:

public static int

findBisect(Card[] deck, Card card,

int

low,

int

high)

Ta có th coi

cards, low, và high ch là m t thông s quy đ nh m t

c bài con

. Cách suy nghĩ này r t

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.