#递归
def fact(x):
if x == 1:
return 1
else:
return x * fact(x - 1)
#tail recursion(尾递归)
def tail_recusion(x,total=1):
if x == 1:
return total
else:
return tail_recusion(x-1,total*x)
print(fact(5))
print(tail_recusion(5))
以上是递归和尾递归的代码。
在学习递归的同时要了解栈(stack)这种数据结构。
stack只有两种操作:压入(插入)和弹出(删除和读取)。
注:Python对递归的次数有限制,当递归深度超过1000时,会抛出异常:
RecursionError: maximum recursion depth exceeded in comparison
用递归写Fibonacci:Fibonacci数列为:0、1、1、2、3、5、8、13、21......
用递归的方法来定义:
- f(0) = 0
- f(1) = 1
- f(n) = f(n-1) + f(n-2) , n>=2
#fibonacci
x = int(input("input a number:"))
def fibonacci(n):
if n == 0:
return 0
if n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
for i in range(x):
print(fibonacci(i))