python之递归函数

it2022-05-05  171

递归函数定义:一个函数在函数内部调用自身的函数,称为递归函数

在我们计算1+2+3+4+5+…100的时候,我们可以用循环语句来进行求和,如下代码

#循环求解1+2+3+4+5+....100 sum = 0 for i in range(1,101): sum += i print(sum)

下面用递归函数实现

#递归求解1+2+3+4+5+.....100 def mysum(m): if m == 1: return 1 else: return mysum(m-1)+m print(mysum(100))

通过比较,可以看出循环语句和递归函数都很简洁,但不可置否,递归函数具有更加清晰的逻辑过程 下面看几个经典的例子

使用递归函数实现斐波那契数列1,1,2,3,5,8,13,21… def Fibon(n): if n ==1 or n == 2: return 1 else: return Fibon(n-1)+Fibon(n-2) print(Fibon(8)) 一球从100米高度自由落下,每次落地后反跳回原高度的一半; 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? def rebound(height,freq,sum=0): if freq == 0: return height,sum-height else: return rebound(height/2,freq-1,sum+height*3/2) height = 100 freq = 10 List = rebound(height,freq) print('第%d次落地经过的路程为%f,第%d次反弹高度为%f'%(height,List[1],freq,List[0])) 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少桃子? def peach(sum=1,day=10): if day == 1: return sum else: return peach((sum+1)*2,day-1) print(peach())

以上都是使用递归函数解决的经典例子,解题方便快捷,逻辑思维清晰。如果我们尝试用循环来解决的话,就会发现求解过程中,逻辑很乱,求解容易出错

递归优点:简洁,逻辑清晰,解题更具有思路 递归缺点:使用递归函数的时候,我们需要反复调用函数,耗内存

总结:在我们解决问题的时候,如果使用循环能够解决,并且代码不冗长的情况下,不建议使用递归求解。当我们使用循环不容易求解的情况,或者求解过程很繁琐,代码冗长的情况下,我们便可以尝试使用递归求解。会使解题过程简洁明了


最新回复(0)