Python 程序设计讲义(60):Python 的函数——递归函数

Python 程序设计讲义(60):Python 的函数——递归函数

函数一般是被其他程序调用的,但函数也可以被自己内部代码调用。这种在函数内部代码中调用自身的方式称为递归。

一、递归的概念

递归可以将复杂的问题简单化。递归把一个复杂的问题,按照特定的规律,逐步简化为多个更小的同类问题,并延续这个简化过程,直到问题得以解决。然后返回,依次解决问题,最终解决复杂问题。

递归包含以下两点:

1、递归终点:递归的结束条件,当结束时必须有对应的值。

2、递归方式:每次递归要执行的操作,并且该操作是向递归终点发展的。

例如:求5!可以使用递归实现

递归终点:1!=1

5!=5*4!

4!=4*3!

3!=3*2!

2!=2*1!

二、递归的实现

函数中的递归是通过反复调用函数自身来实现的。

1、求n!

代码如下:

def fac(n):
    if n==1:
        return 1
    else:
        return n*fac(n-1)

print(fac(5))

程序的执行结果为:
120
2、汉诺塔问题

n个标记为1,2,3,...,n的大小互不相同的盘子,3个标记为A,B,C的塔。借助塔C把所有盘子从塔A移动到塔B

初始状态时所有盘子都放在塔A,任何时候盘子都不能放在比它小的盘子的上方,每次只能移动一个盘子,并且这个盘子必须在塔顶位置。

当只有一个盘子时,即n=1时,我们可以简单地把这个盘子直接从塔A移动到塔B。这就是该问题的终止条件。

n>1时,我们依次解决以下三个问题即可:

(1)借助塔B将前n-1个盘子从塔A移动到塔C

(2)将盘子n从塔A移动到塔B

(3)借助塔A将前n-1个盘子从塔C移动到塔B

代码如下:

def han(n,a,b,c):
    if n==1:
        # 当只有一个盘子时,即n=1时,我们可以简单地把这个盘子直接从塔A移动到塔B。
        print('{}:{}-->{}'.format(n,a,b))
    else:
        han(n-1,a,c,b)  #借助塔B将前n-1个盘子从塔A移动到塔C。
        print('{}:{}-->{}'.format(n,a,b)) #把最后一个盘子直接从塔A移动到塔B。
        han(n-1,c,b,a)  #借助塔A将前n-1个盘子从塔C移动到塔B

han(4,'A','B','C')

程序结果为:
1:A-->C
2:A-->B
1:C-->B
3:A-->C
1:B-->A
2:B-->C
1:A-->C
4:A-->B
1:C-->B
2:C-->A
1:B-->A
3:C-->B
1:A-->C
2:A-->B
1:C-->B
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睿思达DBA_WGX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值