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

2025-11-24 07:54:33

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 sys


print('修改前深度:',sys.getrecursionlimit())

---修改前深度: 1000

sys.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-如何实现函数的递归操作

1、用例子来说明:从1到某个整数之间的所有整数和。

def addNum(a):


   if a==1:
       return 1
   return (a+addNum(a-1))
print(addNum(3))

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

2、以上面的函数为例,用debug来看看递归运行的轨迹:

有一点必须搞清楚,函数return的返回值,是返回到调用函数的地方。

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

1、例如要从一个文件夹下,搜索出所有txt文件。那么就要对每一层的文件夹遍历,就要写与文件层一样多的嵌套。

例如图片中的文件夹F:\\test。要获得它下面的所有txt文件:看下面的例子。

(注:例子仅仅是为了说明问题。)

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

2、首先用for循环来层层遍历进行搜索:

例如:

import o


myDir = 'F:\\test
for 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.txt

F:\test\bb.txt

F:\test\no1-1\cc.txt

F:\test\no1-2\hh.txt

这是遍历了两层,如果有十层八层,就混乱了。这种情况要考虑递归写法。

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

3、在写循环嵌套的时,如果每次嵌套的作用都一样,可以试试用递归的方法:

上例用递归来搜索文件:

def getFile(myDir):


   for i in 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)
   return
getFile('F:\\test')

1)每次循环符合条件就输出文件(或删除,和复制,或重命名),碰到文件夹就调用自身,直到将所有的文件遍历完。

2)在循环体内调用自身,所以它的出口在就在for循环,循环结束,递归就结束了。

仅用了一个循环就能遍历出一个文件夹下所有的想要的文件。只要不超出你设置的递归深度,多少层都可以。

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

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