目标:修改递归斐波那契函数以打印其局部变量和递归调用参数。对于每个递归调用,在单独的行上显示输出并添加压痕级别。
我尝试过:
from pprint import pprint
def fib(n):
if n == 0 or n == 1:
return 1
pprint(f" fib({fib(n - 1)})")
pprint(f" fib({fib(n - 2)})")
fib(n - 1) + fib(n - 2)
return fib(n - 1) + fib(n - 2)
fib(5)
第一个问题:
例如,当我呼叫fib(5)
时,它不会打印fib(5)或fib(4)。我该如何解决?
您正在尝试将fib(n-1)
的结果嵌入到字符串中;您只需要n-1
。
from pprint import pprint
def fib(n):
if n == 0 or n == 1:
return 1
pprint(f" fib({n - 1})") # f" fib({fib(n - 1)})"
pprint(f" fib({n - 2})")
fib(n - 1) + fib(n - 2)
return fib(n - 1) + fib(n - 2)
fib(5)
如果调用fib(5)
,则无法写入fib(5)
,因为fib(5)
等于fib(4) + fib(3)
。另外,这样做确实很不好,因为您两次打电话。因此,我建议您使用下一个代码:
def fib(n):
if n <= 1:
return n
else:
n_minus_one = fib(n - 1)
n_minus_two = fib(n - 2)
print(f'call: fib({n-1}) value={n_minus_one}')
print(f'call: fib({n-2}) value={n_minus_two}')
return n_minus_one + n_minus_two
print(fib(5))
或者,如果您不想看到值:
def fib(n):
if n <= 1:
return n
else:
print(f'call: fib({n-1})')
print(f'call: fib({n-2})')
return fib(n-1) + fib(n-2)
print(fib(5))
希望我能帮助您。