Tôi cần một số trợ giúp để hiểu được quá trình xử lý xảy ra ở đây, vì vậy hãy nói rằng tôi gọi số fib(5)
Tôi muốn mã 5, tức là 8. Nhưng bộ não của tôi đang cố gắng hiểu thuật toán cho biết không phải. Đây là cách tôi (sai) nghĩ:Đệ quy trên Fibonacci Sequence
return fib(4) + fib(3) // Stack frame 1
return fib(3) + fib(1) // Stack frame 2
nay gây ra x là 1 fib(1)
, tuyên bố có điều kiện if x == 0 or x == 1:
làm cho đệ quy kết thúc. Theo logic của tôi sẽ trở thành 3 + 1 + 4 + 3. Vui lòng sửa lỗi logic của tôi.
def fib(x):
"""assumes x an int >= 0
returns Fibonacci of x"""
assert type(x) == int and x >= 0
if x == 0 or x == 1:
return 1
else:
return fib(x-1) + fib(x-2)
Chỉ cần viết trên giấy cuộc gọi đầu tiên và thay thế từng cuộc gọi đệ quy của hàm bằng câu lệnh trả về hợp lệ. Những gì bạn có thể không hiểu là 'return fib (x - 1) + fib (x - 2)' gọi hai lần chức năng fib của bạn, một với ** tham số ** x = ** hiện tại ** x giảm đi một lần, và cái kia bị giảm đi hai lần. Bạn cũng có thể xem xét lại các đối số hàm, vì đây là một sự hiểu lầm điển hình khi sử dụng các hàm (lúc đầu). –
Chỉ cần đặt một số tuyên bố in trong chức năng của bạn và chạy nó để xem những gì nó đang làm. – martineau