Fibonacci递归,为什么fib(2)打印两个?

时间:2017-07-18 13:17:28

标签: fibonacci

def fib(x):
  if x == 0 or x == 1:
   return 1
  else:
   return fib(x-1) + fib(x-2)

print (fib(2))

我的逻辑是:

1st fib(2-1)+fib(2-2) return fib(1) 
2st fib(1) return 1 ; 
3rd print 1 
谁可以告诉我我的想法有什么问题?

2 个答案:

答案 0 :(得分:1)

你的逻辑在这里有问题

 if x == 0 or x == 1:
       return 1

因此

    1st fib(2-1) + fib(2-2) ; 
subdivide into fib(1) + fib(0);
    2nd fib(1) return 1 + fib(0) return 1;
    3rd 1+1 = 2;
    print 2;

您的 if语句状态if x== 0 OR x == 1: return 1;

答案 1 :(得分:1)

斐波纳契系列的前5个术语如下:

0 : 0
1 : 1
2 : 1
3 : 2
4 : 3

您的代码会返回一系列前5个术语:

0 : 1
1 : 1
2 : 2
3 : 3
4 : 5

你的函数没有返回正确值的原因是因为这个if语句:

if x == 0 or x == 1:
    return 1

这当然是完全错误的。为了获得正确的数字,您必须修改代码,如下所示:

def fib(x):
    if x == 0:
        return 0
    elif x == 1 or x == 2:
        return 1
    else:
        return fib(x-1) + fib(x-2)

如果参数x为0,则此更正函数返回0,如果参数为1或2,则返回1.