我如何可以编码涉及两个输入的斐波那契序列,一个确定规则,另一个确定产生的数字数量



我有一个关于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]

相关内容

最新更新