马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 向西而笑 于 2017-7-22 17:20 编辑
程序调用自身的技巧叫做递归
例子:求阶乘
def jc (n):
if n ==1:
return 1
else:
return n * jc(n-1)
num = int(input('请输入一个数:'))
result= jc(num)
print('%d的阶乘是%d' %(num,result))
斐波那契数列
兔子繁殖问题:第一个月有一对兔子,第二个月还是只有一对兔子,第三个月开始兔子对数是前一个月加上前两个月对数的和,问20个月后有多少对兔子。
迭代代码如下:
# 迭代实现斐波那契数列函数
def fib (n):
x = 0
y = 1
while n:
x,y=y,x+y
n -= 1
return x
递归代码如下:
# 递归实现斐波那契数列函数
def fib (n):
if n == 1 or n==2 :
return 1
else:
return fib(n-2) +fib(n-1)
运用递归实现汉诺塔游戏
汉诺塔游戏的规则如下:
有三根柱子:x、y、z,开始x柱子上有n个盘子,盘子大小不同,小的在大的上面。要求按同样顺序将x柱子上的盘子移动到z柱子上,每次只能转移一个,且小的不能在大的下面。
思路:将这个问题可以分解成三个问题:1、将x柱子上的n-1个盘子移动到y柱子上。2、将x柱子上最后一个盘子移动到z柱子上。 3、将y柱子上n-1个盘子移动到z柱子上。 依次将问题分解下去。
代码如下:def hnt(n,x,y,z):
if n == 1:
print(x, '-->' ,z)
else:
hnt(n-1,x,z,y)
print(x, '-->' ,z)
hnt(n-1,y,x,z)
n = int(input('请输入层数:'))
hnt(n,'X','Y','Z')
这个汉诺塔递归代码真的废了我好多时间区理解。
总结
递归思想就是把一个复杂的问题分成比较简单的问题解决,如果还解决不了就继续分下去直到解决。但是容易出错而且效率也低,非常消耗时间和空间,一不小心就会无限循环下去,谨慎使用。
|