著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21, 34,
def Fibonacci(n):
if(n==1):
res=1
if(n==2):
res=1
if(n>2):
res=Fibonacci(n-1)+Fibonacci(n-2)
return res
print Fibonacci(3)
print Fibonacci(5)
print Fibonacci(6)
print Fibonacci(28)
- 递归优点:定义简单,逻辑清晰;缺点:容易造成栈溢出
- 解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环当成一种特殊的尾递归函数也是可以的。
- 尾递归是指,在函数返回的时候调用本身自身,并且return语句不能包含表达式。
def Fib(index):
n,a,b=0,0,1
while(n<index):
#print ('index:%d n:%d a:%d b:%d' %(index,n,a,b))
a,b=b,a+b
n=n+1
#print ('return b:%d' %b)
return b
print Fib(3)
print Fib(5)
print Fib(6)
print Fib(28)
print '###############'
print Fib(1000)
print Fibonacci(800) #循环计算很久,超时
打印Fibonacci斐波那契数列序列数
def printFib(num):
n,a,b=0,0,1
while(n<num):
print b
a,b=b,a+b
n=n+1
return 'done'
print printFib(12)#1,1,2,3,5,8,13,21,34,55,89,144