zoukankan      html  css  js  c++  java
  • Python-函数的递归调用

    递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等
     
    注意:
      - 必须有最后的默认结果
        if n ==0,(不能一直调用自己,如果没有可能会造成死循环)
      - 递归参数必须向默认的结果收敛
        func(n-1)
     
     

    例子1:计算5的阶乘

    复制代码
    #!/usr/bin/env python
     
    def func(n):
      if n == 0:
        return 1
      else:
        return n * func(n-1)
     
    print func(5)
    复制代码
     

    例子2:计算1到100的和

    复制代码
    #!/usr/bin/env python
     
    def func(n):
      sum = 0
      if n == 0:
        return 0
      else:
        return n + func(n-1)
     
    print func(100)
    复制代码
     

    例子3:用递归的方法打印目录下的所有文件名

    复制代码
    #!/usr/bin/env python
     
    import os
    import sys
     
    def listdir(n):
      lsdir = os.listdir(n)
      for i in lsdir:
        if os.path.isfile(os.path.join(n,i)):
          print os.path.join(n,i)
        else:
          listdir(os.path.join(n,i))
          listdir(sys.argv[1])
    复制代码
    改进版:
    复制代码
    #!/usr/bin/env python
     
    import os
    import sys
     
    def print_file(path):
      lsdir = os.listdir(path)
      files = [ i for i in lsdir if os.path.isfile(os.path.join(path,i)) ]
      dicts = [ i for i in lsdir if os.path.isdir(os.path.join(path,i)) ]
      if files:
        for i in files:
          print os.path.join(path,i)
      if dicts:
        for f in dicts:
          print_file(os.path.join(path,f))
          print_file(sys.argv[1])
    复制代码

    用到的模块

      os.path.isdir()
        - 判断后面的文件是否是目录,是的话返回True(不能判断目录是否存在,不存在也会返回false)
      os.path.isfile()
        - 判断后面的文件是否是文件,是的话返回True(不能判断文件是否存在,不存在也会返回false)
      os.path.join()
        - 连接括号中的路径(文件)
        os.path.join('/etc/','passwd','abc') ----> /etc/passwd/abc
     

    注意

      Python3默认递归的深度不能超过1000层
  • 相关阅读:
    Android java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor ver
    Android EditText光标位置(定位到最后)
    Android EditText获取光标位置并插入字符删除字符
    Android 仿微信小视频录制
    Android仿微信小视频录制功能
    Android消息机制之实现两个不同线程之间相互传递数据相互调用
    Android Data Binding 技术
    Android中解析XML
    Android 怎样把光标放在EditText中文本的末尾处?
    Hadoop HBase概念学习系列之RowKey设计(二十九)
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/9021992.html
Copyright © 2011-2022 走看看