如何在第 n 个斐波那契数之前打印所有斐波那契数?
How to print all fibonacci numbers before the n-th fibonacci number?
我想将所有斐波那契数打印到索引为 n 的那个数,但我的代码只打印第 n 个斐波那契数。请告诉我我哪里做错了,应该怎么做?
n = int(input('Enter a number: '))
def fibonacci(n):
if n < 0:
print("Error(enter a positive integer)")
elif n == 1:
return 0
elif n == 2:
return 1
else:
for i in range(n):
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(n))
for i in range(n):
return fibonacci(n-1) + fibonacci(n-2)
这个 for 循环是没有意义的,因为你 return
在第一次迭代中。你应该完全摆脱这里的 for 循环。
这也不是您要重复的部分。相反,您想重复 print()
语句:
for i in range(n):
print(fibonacci(i)) # You want the i-th fibonacci number
这会得到您想要的结果,但这是一种非常低效的方法。对于较大的 n
值,您将计算第 i 个斐波那契数的指数次。
如果您很聪明并且您的 n
大于 1,您可能想以更复杂的方式使用 reduce
:
from functools import reduce
def fibonacci(n):
return reduce(lambda x,y: x+[x[-1]+x[-2]], [[0,1]]+[[0]]*(n-2))
这是 n=5
的工作方式:
[[0,1], [0], [0], [0]] ->
[[0,1,1], [0], [0]] ->
[[0,1,1,2], [0]] ->
[[0,1,1,2,3]] ->
stops here and returns [0,1,1,2,3]
这个怎么样?:
def fib(l,ix):
a = [l[0], l[1]]
for i in range(ix):
b = a[i+1]+a[i]
a.append(b)
return str(a)[1:-1]
第一个参数是关于斐波那契数列的前两个数(即 [0,1])。第二个参数是你想要斐波那契数的数字(即 50)。
这给你类似 print(fib([0,1],50))
.
我想将所有斐波那契数打印到索引为 n 的那个数,但我的代码只打印第 n 个斐波那契数。请告诉我我哪里做错了,应该怎么做?
n = int(input('Enter a number: '))
def fibonacci(n):
if n < 0:
print("Error(enter a positive integer)")
elif n == 1:
return 0
elif n == 2:
return 1
else:
for i in range(n):
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(n))
for i in range(n):
return fibonacci(n-1) + fibonacci(n-2)
这个 for 循环是没有意义的,因为你 return
在第一次迭代中。你应该完全摆脱这里的 for 循环。
这也不是您要重复的部分。相反,您想重复 print()
语句:
for i in range(n):
print(fibonacci(i)) # You want the i-th fibonacci number
这会得到您想要的结果,但这是一种非常低效的方法。对于较大的 n
值,您将计算第 i 个斐波那契数的指数次。
如果您很聪明并且您的 n
大于 1,您可能想以更复杂的方式使用 reduce
:
from functools import reduce
def fibonacci(n):
return reduce(lambda x,y: x+[x[-1]+x[-2]], [[0,1]]+[[0]]*(n-2))
这是 n=5
的工作方式:
[[0,1], [0], [0], [0]] ->
[[0,1,1], [0], [0]] ->
[[0,1,1,2], [0]] ->
[[0,1,1,2,3]] ->
stops here and returns [0,1,1,2,3]
这个怎么样?:
def fib(l,ix):
a = [l[0], l[1]]
for i in range(ix):
b = a[i+1]+a[i]
a.append(b)
return str(a)[1:-1]
第一个参数是关于斐波那契数列的前两个数(即 [0,1])。第二个参数是你想要斐波那契数的数字(即 50)。
这给你类似 print(fib([0,1],50))
.