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
谁可以告诉我我的想法有什么问题?
答案 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.