zoukankan      html  css  js  c++  java
  • 23.python递归函数介绍

    不断的对于某操作重复调用执行称为递归调用,递归函数执行的这个过程中只有进栈(开辟空间),没有出栈,直到最后一次调用完毕了,才逐个出栈,所以递归函数在执行的时候非常的占用内存资源;如果执行的次数过多了,会产生内存溢出的现象;所以一定要控制递归的层数,当符合某一条件时要终止递归调用,几乎所有的递归都能用while循环来代替;所以对于递归要慎用!!!

    递归函数:在某个函数中,调用其本身(函数自己调用自己),这个函数整体我们称为递归函数。

    如何定义递归函数?(先假设此函数已经实现)

    考虑切入点:(1).寻找一个临界点(结束点);(2).本次的函数执行不能满足最终的整体需求,所以还需要再次的去调用此函数;(找到后者和前者之间的关系,体现:后者的调用结束会将前者需要的数据返回回来)

    优点:递归可以把问题简单化,让思路使为清淅,代码更简洁。缺点:递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果。

    演示递归函数调用自身:

     1 # 直接调用自身:
     2 def f():
     3   f()
     4 
     5 f()
    1 # 间接调用自身:
    2 def fa():
    3   fb()
    4 def fb():
    5   fa()
    6  
    7 fa()

    代码演示示例:

     1 # 递归求和:0 + 1 + 2 + 3 + 4 + ..... + n 的和
     2 def mysum(n):
     3     if n == 0:
     4         return 0
     5   return n + mysum(n-1)
     6 
     7 print(mysum(100)) # 5050
     8 print(mysum(998)) # 没错 ,是临界点,再大就会溢出
     9 print(mysum(1000)) # 程序崩溃(递归的弊端)
    10 
    11 
    12 # 计算1~5的阶乘
    13 def jiechen(num):
    14     if num == 1:
    15         return 1
    16     return num * jiechen(num - 1)
    17 
    18 print(jiechen(5))
    19 
    20 
    21 # 遍历某个路径下面的所有内容(文件和目录,考虑多级的情况)
    22 import os
    23 # 自定义函数(递归函数):遍历目录层级(多层)
    24 def printDirs(path):
    25     dirs = os.listdir(path)
    26     # 循环处理此列表
    27     for d in dirs:
    28         # 组装d得到其绝对路径形式
    29         fileAbsPath = os.path.join(path,d)
    30         # 判断是目录还是文件
    31         # 如果是文件直接打印即可,如果是目录打印完毕后再次调用此函数
    32         if os.path.isfile(fileAbsPath):
    33             print(d)
    34         elif os.path.isdir(fileAbsPath):
    35             print(d)
    36             printDirs(fileAbsPath)
    37 path = r'C:UsersAdministratorDesktopa'
    38 printDirs(path)
  • 相关阅读:
    MySQL 通过多个示例学习索引
    git reset的用法
    git rebase的用法
    学习yii2.0——依赖注入
    学习yii2.0——行为
    学习yii2.0——事件
    学习yii2.0——数据验证
    让Apache和Nginx支持php-fpm模块
    安装python3
    使用php操作memcache
  • 原文地址:https://www.cnblogs.com/bonheur/p/12387349.html
Copyright © 2011-2022 走看看