在n = 46之后,此代码没有返回正确的答案。我该怎么做才能解决这个问题以获得更高的第n个术语?
df2 =pd.merge(df2,df1,on='A',how='left')
df2 = df2.fillna(value='00')
df2 = df2[['A','D','C']].rename(columns={'C': 'E'})
print(df2)
A D E
0 1 0 00
1 2 0 900
2 3 0 00
3 4 0 300
4 5 0 900
5 6 0 00
谢谢大家的积极反馈。在问到问题之后,我一想到代码就弄明白了。
答案 0 :(得分:3)
这很可能是因为整数溢出。使用long
表示变量x
,y
和z
。
这会让你更进一步,但最终也会溢出long
范围。如果您还需要更大的数字,请转到BigInteger
。
答案 1 :(得分:-1)
复杂度为O(1)
的最佳方式是Binet的公式,在Java中如下:
static long fibonacciBinet(long n) {
if (n <= 1) return n;
double sqrt5 = Math.sqrt(5);
long x = (long) ((Math.pow(1+sqrt5, n)-Math.pow(1-sqrt5, n))/(Math.pow(2, n)*sqrt5));
return x;
}