递归在编程中使用起来还是很方便的
python3中默认的递归层数是100,当然我们也是可以修改的
>>> import sys
>>> sys.setrecursionlimit(100)
>>>
用普通的函数迭代求阶乘:
def factorial(n):
result = n
for i in range(1,n):
result *= i
return result
number = int(input('请输入一个正整数:'))
result = factorial(number)
print("%d 的阶乘是:%d" %(number,result))
用递归求阶乘:
def factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
number = int(input('请输入一个正整数:'))
result = factorial(number)
print("%d 的阶乘是:%d" %(number,result))
斐波那契数列
下面用迭代的方式实现以下:
def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入有误')
return -1
while (n - 2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n -=1
return n3
result = fab(20)
if result != -1:
print('共有%d对小兔子诞生!' %result)
然后用递归实现以下:
def fab(n):
if n < 1:
print('输入有误')
return -1
if n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)
result = fab(20)
if result != -1:
print('共有%d对小兔子诞生!' %result)
当数值较小的时候递归和迭代的速度可以说是相当的,但是当结果较大时递归运算是比较慢的,迭代的速度要比递归快得多。
递归汉诺塔
def hanoi(n,x,y,z):
if n == 1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y) #将前n-1个盘子从x移动到y
print(x,'-->',z) #将最后一个盘子从x移动到z
hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z
n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'X','Y','Z')