更新时间:2022-10-25 19:43:10
现在的问题是,你的返回是
是函数的循环中。因此在第一次迭代之后,将已经停止,并返回所述第一值:1.除非 N
为0,在这种情况下,功能是由以返回 0
本身,如果 N
1,当循环不会重复,甚至一次也没有返回
正在被执行(因此无
返回值)。
要解决这个问题,只要移动返回是
的循环之外。
随着KebertX的例子,这里是一个解决方案,我会亲自做在Python。当然,如果你要处理许多斐波纳契值,你甚至可能要合并这两个解决方案,并为数字的高速缓存。
高清F(N):
的a,b = 0,1
对于i在范围(0,n)的:
的a,b = B,A + B
返回
I am interested in a iterative algorithm for Fibonacci numbers, so I found the formula on wiki...it looks straight forward so I tried it in Python...it doesn't have a problem compiling and formula looks right...not sure why its giving the wrong output...did I not implement it right ?
def fib (n):
if( n == 0):
return 0
else:
x = 0
y = 1
for i in range(1,n):
z = (x + y)
x = y
y = z
return y
for i in range(10):
print (fib(i))
output
0
None
1
1
1
1
1
1
1
1
1
1
The problem is that your return y
is within the loop of your function. So after the first iteration, it will already stop and return the first value: 1. Except when n
is 0, in which case the function is made to return 0
itself, and in case n
is 1, when the for loop will not iterate even once, and no return
is being execute (hence the None
return value).
To fix this, just move the return y
outside of the loop.
Following KebertX’s example, here is a solution I would personally make in Python. Of course, if you were to process many Fibonacci values, you might even want to combine those two solutions and create a cache for the numbers.
def f(n):
a, b = 0, 1
for i in range(0, n):
a, b = b, a + b
return a