python 函数的递归

函数递归

函数是代码的一种封装,可以被其他程序调用,也可以在函数内部被调用,在函数内部调用自身的方式称为函数的递归。就像是人站在镜子面前看着镜子一样,镜子中的镜像也是:一个人在看镜子,镜子中的镜子的镜像也是一个人在看镜子一样…有点递归内味了。
数学中的阶乘就可以用递归进行计算,你如果要计算n!你必须要计算出(n-1)!,想要计算出(n-1)!就要计算出(n-1-1)!以此类推,最后往前推算n次就得到了(n-n)!=0于是,我们得出了0!=1,有了0的阶乘就可以得知1的阶乘(0!*1),有了1的阶乘就知道了2的阶乘1!**2,以此类推就得到了n的阶乘。
如果我们设定一个求阶乘的函数func,我们想要计算n!必须要知道(n-1)的阶乘,以此类推:
func(n)——>func(n-1)——>func(n-2)——>func(n-3)——>…——>func(0)=1
我们有了0的阶乘值就可以计算:1!然后2!…n!
func(0)=1——>func(1)——>func(2)——>func(3)——>…——>func(n)
我们每次计算n的阶乘时都要返回到计算(n-1)的阶乘,那么我们怎样使函数返回计算(n-1)的阶乘呢?我们学过return呀,return可以返回函数的控制权到调用者处,那么如果自身作为调用者不就可以把控制权给本函数接着计算(n-1)!了吗
————————————真是个小机灵鬼—————————————————

def func(n):
    if(n==0):
        return 1    #递归的突破口,某种情况下可以得到的特殊值
    else:
        return n*func(n-1) 
        '''
        根据阶乘定义n!=n*(n-1)*(n-2)*...*1
        且(n-1)!要使用func(n-1)得出,即所谓的调用自身
        '''
print(func(3))

得到结果为:6
其中递归到底的特殊值(或者是已知值)称为基例,基例不需要再递归,它是确定的值。且所有基例都要以一个或多个基例结尾。
熟练使用函数递归需要明白调用自身的含义,即把未知的值用函数本身表示出来,而且使用递归需要求解的问题前后项之间存在一定关系。
递归执行时会从第一项一直执行到基例,执行到基例后会从基例逆向执行到第一项并得出最终结果返回,有始有终。
给你们康康书上的递归讲解图:
在这里插入图片描述

最后,使用递归的时候一定要注意基例的构建,否则递归无法返回将会报错。默认情况下递归层数不得超过1000层,一旦超过了系统允许的最大递归深度,python解释器将终止程序。这样设定是为了防止无限递归从而无限占用内存而设计的。
如果你的递归正确但是层数超过了1000层可以这样设定最大递归限度:

import sys
max=2000#设定最大递归限度
sys.setrecursionlimit(max)

好了,又到了说再见的时候了(→_←)
今天你学废了吗(`・ω・´)
再见咯

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值