m = 2
n =20
a,b = m,0
fib = [m]
while a <= n:
fib.append(a)
a,b = a+b, a
因此,从m
到n (and m < n)
给出两个变量,我需要创建一个列表,其中包含m
和n
之间的所有Fibonacci序列号(但不能超过)例如:如果m = 2
和n = 20
,那么fib
应为[2,3,5,8,13]
。
答案 0 :(得分:1)
我不知道如何在中途启动fibonnaci序列,所以我能想到的最好是过滤后的结果。
def f(low, high):
fib = [0]
a, b = 1, 0
while a <= n:
fib.append(a)
a,b = a+b, a
return filter(lambda x: x >= low and x =< high, fib)
斐波那契代码是微不足道的,你可能在这里看到的新东西是filter
,它接受一个函数f
和一个可迭代的x
,并返回一个新的可迭代的全部来自x
的元素使f(x)
成立。
答案 1 :(得分:1)
def fib(m,n):
a,b = 1,1
while a < m:
a,b = b, a+b
answer = [a]
while b < n:
a,b = b, a+b
answer.append(a)
return answer
In [2040]: fib(2,20)
Out[2040]: [2, 3, 5, 8, 13]
答案 2 :(得分:0)
m = int(raw_input("Enter the start number : "))
n = int(raw_input("Enter the end number : "))
def fib(i):
if i == 0: return 0
elif i == 1: return 1
else: return f(i-1)+f(i-2)
print map(fib, range(m, n))
我希望这是你需要的。
答案 3 :(得分:0)
我感谢通过递归计算斐波纳契数或将所有数字放在列表中简单明了。但如果数量太大,那不是一个好主意。 这是代码,BTW
def main():
print fibo(100,600)
def fibo(m,n):
f0=2
f1=3
while f1<m:
tmp=f1
f1=f0+f1
f0=tmp
res=[f0]
while f1<n:
res.append(f1)
f1=res[-2]+res[-1]
return res[1:];
if __name__ == '__main__':
main()
答案 4 :(得分:0)
我用谷歌搜索并找到斐波纳契的第n项公式here
所以代码可以是:
def fibn(n):
Phi = (1+math.sqrt(5))/2
phi = (1-math.sqrt(5))/2
return round((math.pow(Phi, n) - math.pow(phi, n))/math.sqrt(5))
>>> fibn(0)
0.0
>>> fibn(1)
1.0
>>> fibn(2)
1.0
>>> fibn(3)
2.0
>>> fibn(4)
3.0
>>> fibn(5)
5.0
>>> fibn(6)
8.0
>>> fibn(7)
13.0
>>> fibn(8)
21.0
>>> fibn(9)
34.0
>>> fibn(10)
55.0
答案 5 :(得分:0)
您可以执行以下操作:
def fibs(low,high):
a, b = 0, 1
while 1:
a, b = b, a+b
if low <= a:
if a <= high:
yield a
else:
break
你可以像
一样使用它>>> for num in fibs(2,15):
... print num
...
2
3
5
8
13
但是,如果不依靠nth
斐波纳契数的公式并依赖于正确的舍入,则无法在不计算第一个nth
数字的情况下获得n-1
数字。
所以,如果你不想使用这个公式,最好只保留斐波那契数字列表并使用它,如果事实证明你需要low
和{{之间的数字1}} high
,然后您可以始终使用high > fib_nums[-1]
和fib_nums[-1]
作为fib_nums[-2]
和b
来计算您缺少的值。
答案 6 :(得分:0)
为了获得日志订单解决方案,需要考虑一些子问题,假设(n-m)相对较小。如果(n-m)可以相对较大,则最好预先计算所有结果并简单地进行二分搜索。
对于第一个问题,我们可以使用(http://en.wikipedia.org/wiki/Fibonacci_number#Matrix_form)找到我的斐波那契。
第二个问题可以使用二分搜索来解决,并使用第一种方法来找到斐波那契数&gt; = m。一旦我们知道 j ,我们就可以在对数时间内找到 j + 1 次斐波纳契数,并使用这些数字生成所有其他数字&lt; = n。
答案 7 :(得分:0)
使用Generator:
import os,sys
def fib(num):
a=0
b=1
while 1:
a,b =b, b+a
yield a
low=2
high=200
for i in fib(range(1)):
if i <= high and i >= low :
print i
elif i > high:
break
O / P 2 3 五 8 13 21 34 55 89 144