斐波那契递归,为什么 fib(2) 打印两个?

Fibonacci Recursive, why fib(2) print two?

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 

谁能告诉我我的想法哪里错了?

你的逻辑在这里有问题

 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;

斐波那契数列的前5项如下:

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

您的代码 return 是前 5 个术语的系列:

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

你的函数没有 return 正确值的原因是因为这个 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,则更正函数 returns 0,如果参数为 1 或 2,则为 1。