获取 G 系列的第 n 个值(一般斐波那契数列)

Getting nth value of a G-Series (General Fibonnaci Sequence)

我们如何生成起始值不是 0 和 1 的斐波那契数列的第 n 项。也就是说,用户给出两个起始值,比如 1 和 4,然后代码根据用户输入。例如,1 和 4 将给出 1,4,5,9,13,23... 通过制表或递归很容易想出这个,但我尝试用谷歌搜索一个通用公式(以节省 运行 时间),我发现了这个:

G(a, b, n) = ( (a(√5 – 1) + 2b) Phin + (a(√5 + 1) – 2b) ( –phi)n ) / (2√5 )

请注意上式中'Phin'是Phi的n次方。 (披**n)

其中a和b是起始值,phi,你猜是(1+√5)/2,n是要得到的第n个值。

我尝试在 python 中实现上述公式,但没有给我预期的输出(值不是我所期望的)。我找到这个公式的网站 here 有一个内置的序列生成器,这个生成器按预期工作,但我的代码没有。谁能发现我哪里出错了?

当我执行 fibon(1,4,3) 时,它会生成 13.260990336999413。但答案应该是9; 1,4,5,9

G(a, b, n) = ( (a(√5 – 1) + 2b) Phin + (a(√5 + 1) – 2b) ( –phi)n ) / (2√5 )

def fibon(a,b,n):
    phi = (1+sqrt(5))/2
    g = ((a*(sqrt(5) - 1)+2*b)*phi**n +(a*(sqrt(5)+1)-2*b)*(-phi)**n)/2*(sqrt(5))
    return g

你写了

/2*(sqrt(5))

但这除以二,然后乘以五的平方根。将整个除数放在括号中。

此外,您需要区分 Phi(大写)和 phi(小写)。 phi = (sqrt(5) + 1)/2,但 phi = (sqrt(5) - 1)/2.