马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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')
复制代码
这个汉诺塔递归代码真的废了我好多时间区理解。
总结
递归思想就是把一个复杂的问题分成比较简单的问题解决,如果还解决不了就继续分下去直到解决。但是容易出错而且效率也低,非常消耗时间和空间,一不小心就会无限循环下去,谨慎使用。
|