为Fibonacci序列输入a,b和n

时间:2016-05-22 19:24:57

标签: python algorithm

>

  

到目前为止,这是我的代码。我迷失了如何输入我的所有价值观   公式。我环顾四周,大多数公式只是n-1和   N-2。我有一个,F1,F2和n-1。

a = (int(input("Value of a: ")))

1 个答案:

答案 0 :(得分:1)

  

大多数公式只是n-1和n-2。我有一个,F1,F2和n-1。

正常' Fibonacci序列以您拥有的内容开头:F(1)F(2)和递归规则以生成n-th数字:F(N) = F(N-1) + F(N-2)。您的案例中唯一的变化是递归规则由因子a, b增加:F(N) = a*F(N-1) + b*F(N-2)

  • 您的 return (a*1*(n-1)) + (b*1*(n-2)) 一行未反映 a*F(n-1) + b*F(n-2) a times (n-1)th element plus b times (n-2)th element )。
  • 请注意,(n-1)(n-2)不是因素,而是索引!
  • 如果F(1) == 1F(2) == 1,则F(3) = a*F(2) + b*F(1) = a * 1 + b * 1 = a + b = 3.此外,您应该将整个序列输出到n - 号码,而不仅仅是一个号码。

以下解决方案使用生成器函数和规范Python Fibonacci赋值x, y = y, x + y的变体。输出是第一个n元素的列表:

def fib(a, b):
    x, y = 1, 1 
    while 1:  # this will produce fibonacci-like sequence ad infinitum
        yield x
        x, y = y, b*x + a*y  # here is the variation using a, b

def fib_square(a, b, n):
    fib_gen = fib(a, b)
    return [next(fib_gen) for _ in xrange(n)]
    # print ', '.join([str(next(fib_gen)) for _ in xrange(n)])

> fib_square(1, 2, 8)
[1, 1, 3, 5, 11, 21, 43, 85]
# 1, 1, 3, 5, 11, 21, 43, 85