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层
  • 相关阅读:
    DevExpress.XtraBars.BarManager去掉分割线/分隔符
    C# ToShortDateString() ToString() 设置日期格式的区别
    DevExpress.XtraEditors.TextEdit绑定数据后,不输入内容,出现 “Invalid Value” 无效值错误
    stuff(select ',' + fieldname from tablename for xml path('')),1,1,'')
    string、Empty和null三者的区别
    js数组定义
    Clementine学习
    实现getElementsByClassName
    如何让ajax执行完后再继续往下执行?
    java中arraylist和数组的转换
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/9021992.html
Copyright © 2011-2022 走看看