Я не могу понять, как найти число Фибоначчи с помощью процесса рекурсии. Код дается:
def timed(fn):
from time import perf_counter
from functools import wraps
@wraps(fn)
def inner(*args,**kwargs):
start=perf_counter()
result=fn(*args,**kwargs)
end=perf_counter()
elapsed=end-start
print('{0}({1}) took {2:.6f}s to
run'.format(fn.__name__,args,elapsed))
return result
return inner
@timed
def calc_recursive(n):
if n<=2:
return 1
else:
return calc_recursive(n-1) + calc_recursive(n-2)
calc_recursive(4)
ниже выводится:
calc_recursive(2) took 0.000001s to run
calc_recursive(1) took 0.000001s to run
calc_recursive(3) took 0.000141s to run
calc_recursive(2) took 0.000001s to run
calc_recursive(4) took 0.000239s to run
3
Вот мое замешательство:Предположим, я нахожу calc_recursive (4). Так что это возвращаемое calc_recursive (3) + calc_recursive (2).И снова calc_recursive (3) рассчитывается как calc_recursive (2) (это возвращение 1) + calc_recursive (1) (это возвращение 1).Таким образом, calc_recursive (3) + calc_recursive (2) возвращает 2 + 1 = 3 и сохраняется в «результате». Но он снова выполняет всю «внутреннюю» функцию снова и снова без использования цикла. Почему они печатают снова снова, если не имеютЛюбой цикл внутри? Пожалуйста, объясните, как этот код работает?