python的入门8

递归

函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。

1.递归的思想

把规模大的问题转化为规模小的、具有与原来问题相同解法的问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。

2.递归的使用方法

1.找到递归关系,即把一个复杂的问题转化为与它形式相似、但规模较小的问题
2.找到递归出口,即问题转化时,当规模足够小,可以直接求解

3.递归函数的调用过程

在这里插入图片描述

4.求阶乘问题

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

亦即n!=1×2×3×…×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
在这里插入图片描述
递归方法的要点是一定要有递归结束条件,也就是上面代码里的 x==1,否则就会一直递归,最终超过允许的最大递归次数而出错。在这里插入图片描述

5.斐波那契数列

兔子繁殖问题:
在700多年前,意大利著名数学家斐波那契在《算盘全集》中提到这样一个问题:一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,第n个月有多少对兔子?
F(1)=1
F(2)=1
F(3)=F(1)+F(2)=1+1=2
F(4)=F(2)+F(3)
…………
F(N)=F(N-2)+F(N-1)

代码
在这里插入图片描述

6.汉诺塔

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞n片黄金圆盘。大梵天命令婆罗门把圆盘从下自上开始、按大小顺序重新摆放在另一根柱子上。并且规定,小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,如图所示。问应该怎样移动,才能将圆盘移动到另一根柱子上。
(1)开始的图样和最后要达到的图像
在这里插入图片描述
(2)步骤1:将A柱上的绿色圆盘移动到C柱上,移动过程示意图如图所示。
在这里插入图片描述
(3)步骤2:将A柱上的黄色圆盘移动到B柱上,移动过程示意图如图所示。在这里插入图片描述
(4)步骤3:将C柱上的绿色圆盘移动到B柱的黄色圆盘上,移动过程示意图如图所示。在这里插入图片描述
(5)步骤4:将A柱上的红色圆盘移动到C柱上,移动过程示意图如图所示。在这里插入图片描述
(6)步骤5:将B柱上的绿色圆盘移动到A柱上,移动过程示意图如图所示。在这里插入图片描述
(7)步骤6:将B柱上的黄色圆盘移动到C柱上,移动过程示意图如图所示。在这里插入图片描述
(8)步骤7:将A柱上的绿色圆盘移动到C柱上,移动过程示意图如图所示。在这里插入图片描述
这就是将3层圆盘按照规定移动到另一根柱上的整个过程。不论是3层还是4层还是n层,移动的算法都是这样的,首先是将A柱最上方的n-1个圆盘落在B柱,将此时A柱的最小圆盘落在C柱,B柱上的n-1个圆盘,落在C柱。在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值