python编写递归函数和非递归函数、输出斐波那契数列_python 入门之斐波那契数列递归表达式算法和非递归算法...
題目:?斐波那契數(shù)列是一組有規(guī)律的數(shù)列:1,1,2,3,5,8,13,……..,那么我們怎么用python 來完成此算法,并求出第200位的值是多少
1.python 遞歸表達(dá)式實(shí)現(xiàn):
def fib(n):
return 1 and n <= 2 or fib(n - 1) +fib(n - 2)
print('\n 最終結(jié)果為 %d'%(fib(200)))
但是運(yùn)行了快1分鐘沒出結(jié)果。。。。。。。。。。。。。。。
2.非遞歸算法實(shí)現(xiàn):
def countfib(n):
last=1
now=1
fibnext=1
for i in range(n):
if i<2:
fibnext=1
else:
fibnext=last+now
last=now
now=fibnext
return fibnext
print('\n 最終結(jié)果為 %d'%(countfib(200)))
或者:fib=lambda n,x=0,y=1:x if not n else fib(n-1,y,x+y)
這兩種算法計(jì)算速度簡直飛速!
4.最后的結(jié)果為:280571172992510140037611932413038677189525
5.總結(jié)為什么使用遞歸方式實(shí)現(xiàn)算法很長時(shí)間算不出來的原因:
(1)遞歸算法時(shí)間復(fù)雜度為:O(2^N)—-太耗時(shí)間
(2)非遞歸算法時(shí)間和空間復(fù)雜度都為:O(N)
總結(jié)
以上是生活随笔為你收集整理的python编写递归函数和非递归函数、输出斐波那契数列_python 入门之斐波那契数列递归表达式算法和非递归算法...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蔡崇信回应阿里云暂停分拆:大环境发生变化
- 下一篇: 数据类型不匹配_笔记 | 自学Pytho