运行Fibonacci函数

时间:2016-05-20 15:56:59

标签: python recursion

def fib(n):
    if n == 1 or n == 2:
        return 1
    return fib(n-1) + fib(n-2)

for i in range(5):
    print(fib(i))

我想打印斐波那契序列的前5个结果才能获得

  

RecursionError:比较超出最大递归深度

我认为每个正面n退出,print(fib(4))print(fib(20))print(fib(100))完美无缺。

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

  

每个正面n都有一个退出。

是的,有。但fib(0)怎么样?

尝试print(list(range(5)))

答案 1 :(得分:1)

range(5)0开始,因为你没有在函数中检查0,所以递归永远不会结束。

作为旁注,你没有正确计算斐波那契序列,你应该加起来

fib(n-1) + fib(n-2)

试试这个:

def fib(n):
    if n <= 2:
        return n
    return fib(n-1) + fib(n-2)

计算第n个斐波纳契数时通常更好的方法是使用循环,因为如果使用递归,最终会反复计算相同的值。使用循环你可以这样做:

def fibonacci(n):    
    if n < 2:
       return 1

    a = 1
    fib = 1
    for i in range(n-2):
        a, fib = fib, a + fib            
    return fib