我具有以下示例性递归代码来计算斐波那契数,但它给的输出不正确。
def fib(n):
print("calculate f", n)
if n == 0 or n == 1:
print("return", n)
return n
print("f", n, "=", "f", (n-1), "+", "f", (n-2))
return fib(n-1) + fib(n-2)
n = int(input("calculate f "))
fib(n)
print("f", n, "=", n)
print("return", n)
当我输入2时,它会给出以下输出:
计算f 2
f 2 = f 1 + f 0
计算f 1
返回1
计算f 0
返回0
f 2 = 2
返回2
输出的最后2行是line,它应该是f 2 = 1并返回1,如何纠正我的代码?
答案 0 :(得分:3)
那是因为你有
print("f", n, "=", n)
代替
print("f", n, "=", fib(n))
如果您还想更正最后一行代码,则需要将fibonacci函数的返回值存储在中间值中,然后像这样打印它
result = fib(n)
print("f", n, "=", result)
print("return", result)
答案 1 :(得分:2)
因此,基本上,您希望使用print()
来对代码进行膨胀,以获取输出,就像您提供的图像一样。现在您丢失了f 2 = 1
(您和图像也丢失了f 0 = 0
和f 1 = 1
-我想这不是问题)。由于此信息在函数fib()
中可用,因此很容易解决该问题,因此请在正确的位置打印。为此,您需要稍微修改函数fib()
的代码-(1)单个return
而不是多个,(2)将所有print()
保留在函数内:
def fib(n):
print("calculate f", n)
if n == 0 or n == 1:
ans = n
else:
print("f", n, "=", "f", (n-1), "+", "f", (n-2))
ans = fib(n-1) + fib(n-2)
print("f", n, "=", ans)
print('return', ans)
return ans
fib(3)
输出:
calculate f 3
f 3 = f 2 + f 1
calculate f 2
f 2 = f 1 + f 0
calculate f 1
return 1
calculate f 0
return 0
f 2 = 1
return 1
calculate f 1
return 1
f 3 = 2
return 2
现在,如果我的眼睛不躺在我身上,输出看起来就像图像中的那个。