递归代码未显示正确的输出?

时间:2018-11-20 03:40:18

标签: python python-3.x

我具有以下示例性递归代码来计算斐波那契数,但它给的输出不正确。

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,如何纠正我的代码?

2 个答案:

答案 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 = 0f 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

现在,如果我的眼睛不躺在我身上,输出看起来就像图像中的那个。