Python-如何实现函数的递归操作

2025-05-23 18:35:57

递归的要素,递归运行的过程。

1.函数实现递归的条件

1、一个函数在它的内部引用自身,并在一定条件下停止函数的调用。这就会实现一个递归的过程。第一个条件是函数内部引用自身。引用自身会发生什么情况:示例:def myFun(a): print(a) a+=1 myFun(a)myFun(1)RecursionError: maximum recursion depth exceeded while calling a Python object递归错误:调用python对象时超过了最大递归深度

Python-如何实现函数的递归操作

2、上例中超过了递归的最大深度而终止运行;可以通过sys模块来查看最大深度,并能更改这个深度值。例如:import sysprint('修改前深度:',sys.getrecursionlimit())---修改前深度: 1000sys.setrecursionlimit(2000)print('修改后深度:',sys.getrecursionlimit())---修改后深度: 2000

Python-如何实现函数的递归操作

3、第二个条件,停止函数的调用,就是递归的出口。例如return就可以作为一个出口。例如:把上面的例子在调用自身前加个条件返回就可以了;def myFun(a): print(a) if a==5: return a+=1 myFun(a)myFun(1)

Python-如何实现函数的递归操作

2.递归运行的过程。

1、用例子来说明:从1到某个整数之间的所有整数和。def addNum(a): if a==1: return 1 return (a+addNum(a-1))print(addNum(3))

Python-如何实现函数的递归操作

2、以上面的函数为例,用debug来看看递归运行的轨迹:有一点必须搞清楚,函数return的返回值,是返回到调用函数的地方。

Python-如何实现函数的递归操作

3.递归和for循环:

1、例如要从一个文件夹下,搜索出所有txt文件。那么就要对每一层的文件夹遍历,就要写与文件层一样多的嵌套。例如图片中的文件夹F:\\test。要获得它下面的所有txt文件:看下面的例子。(注:例子仅仅是为了说明问题。)

Python-如何实现函数的递归操作

2、首先用for循谪藁钴碳环来层层遍历进行搜索:例如:import omyDir = 'F:\\testfor i in os.listdir(myDir): fPath = os.path.join(myDir,i) if os.path.isfile(fPath) and fPath.endswith('.txt'): print(fPath) elif os.path.isdir(fPath): for i in os.listdir(fPath): fPath1 = os.path.join(fPath,i) if os.path.isfile(fPath1) and fPath1.endswith('.txt'): print(fPath1)输出:F:\test\aa.txtF:\test\bb.txtF:\test\no1-1\cc.txtF:\test\no1-2\hh.txt这是遍历了两层,如果有十层八层,就混乱了。这种情况要考虑递归写法。

Python-如何实现函数的递归操作

3、在写循环嵌套的时,如果每次嵌套的作用都一样,可以试试用递归的方法:上例用递归来搜索文件:def getFile(myDir): for i i荏鱿胫协n os.listdir(myDir): fPath = os.path.join(myDir, i) #print(fPath) if os.path.isfile(fPath) and fPath.endswith('.txt'): print(fPath) elif os.path.isdir(fPath): getFile(fPath) returngetFile('F:\\test')1)每次循环符合条件就输出文件(或删除,和复制,或重命名),碰到文件夹就调用自身,直到将所有的文件遍历完。2)在循环体内调用自身,所以它的出口在就在for循环,循环结束,递归就结束了。仅用了一个循环就能遍历出一个文件夹下所有的想要的文件。只要不超出你设置的递归深度,多少层都可以。

Python-如何实现函数的递归操作

小结:

1、这些是方便解释的例子,实际操作可能会碰到很多复制的情况进行判断,但不管怎样,一定要有终止调用自身的条件。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢