首页 飞桨领航团 帖子详情
【AI达人养成营】作业1的斐波那契数列思考
收藏
快速回复
飞桨领航团 其他AI达人创造营 1053 0
【AI达人养成营】作业1的斐波那契数列思考
收藏
快速回复
飞桨领航团 其他AI达人创造营 1053 0

对于作业1中的斐波那契数列的题目

 

我的思路是用公式算,即找到斐波那契数列的通项公式,把n代入公式,获得一个数,把这个数再对10007取余数,获得最终答案。

n = int(input())
a=5**(1/2)
result=1.0/a*(((1+a)/2)**n-((1-a)/2)**n)
result=int(result)
result=result%10007
print(result)

提交完作业后,我又有了一个疑问,公式中存在根号五,会不会影响精度之类的,所以我想试试其他方案。

利用递推公式,一步一步算出第n项,并相加,边加边与对10007取余数,最后f[n]就是答案。

n=int(input())
f=[0,1,1]
for i in range(3,n+1,1):
    f.append((f[i-1]+f[i-2])%10007)
print(f[n])

发现,f中的好多元素使用过几次就不再使用了,一直存着浪费空间,我想了一种方案,优化了一下,使每个元素被用两次就删除。

n=int(input())
f=[1,1]
for i in range(3,n+1,1):
    f[(i+1)%2]=(f[0]+f[1])%10007
print(f[(n+1)%2])

这样,从始至终列表f里都只有2个元素,对于较大的n,所占用内存应该会少很多吧。

如果有错误,还请大家指出。

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户