我有一个关于fibonacci序列的新问题,该序列有点唯一。它涉及两个输入m和n,看起来像这样:
示例:
2-Fibonacci sequence: {1, 1, 2, 3, 5, 8, 13, ...}
3-Fibonacci sequence: {1, 1, 2, 4, 7, 13, 24, ...}
我需要编码一个可以打印出N-fibonacci序列的第一个M元素的Python函数。
例如:
Input → N=3; M=5 Output →1 1 2 4 7
Input → N=2; M=7 Output →1 1 2 3 5 8 13
我真的很感谢任何帮助
n = int(input("sequence: "))
m = int(input("amount of numbers: "))
numbers = [1, 1]
for i in range(n-2):
numbers.append(sum(numbers))
for num in numbers:
print(num)
for i in range(m-len(numbers)):
numbers.append(sum(numbers))
print(numbers[-1])
numbers.pop(0)
如果我正确理解您,这就是您要寻找的。
,因为在这里使用发电机是一个有趣的问题:
from collections import deque
def fib(return_size, last_x=2):
def fib_gen(sum_last_x_elements):
last = deque(maxlen=sum_last_x_elements)
last.append(1) # Prime our fib sequence
while True:
yield last[-1] # peek at the right item and return it
last.append(sum(last)) # Sum up our queue and add it to end
gen = fib_gen(last_x) # Create generator
return [next(gen) for _ in range(return_size)] # Create return list.
print(fib(9, 3)) # Output: [1, 1, 2, 4, 7, 13, 24, 44, 81]
,而不是管理两个变量(a,b(并添加它们,使用结果列表本身并总和最后一个n个项目来添加每个新项目:
def fibo(N,M):
result = [1]
for i in range(M-1):
result.append(sum(result[-N:]))
return result
您可以通过接受基于迄今为止该系列的下一个值来计算下一个值的函数或lambda来概括这一点:
def series(N,getNext,init=[1]):
result = init
for i in range(N-len(init)):
result.append(getNext(result))
return result
series(10,lambda r:sum(r[-2:])) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
series(10,lambda r:sum(r[-2:]),init=[5,-3]) # [5, -3, 2, -1, 1, 0, 1, 1, 2, 3]
series(10,lambda r:sum(r[-3:])) # [1, 1, 2, 4, 7, 13, 24, 44, 81, 149]
series(10,lambda r:r[-1]*2) # [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
series(10,lambda r:r[-2]-r[-1],init=[-1,1]) # [-1, 1, -2, 3, -5, 8, -13, 21, -34, 55]