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层
  • 相关阅读:
    mysql 加入列,改动列,删除列。
    C语言中的static 具体分析
    [Python网络编程]gevent httpclient以及网页编码
    iOS学习之 plist文件的读写
    数据库设计中的14个技巧
    最简单的基于FFMPEG的封装格式转换器(无编解码)
    一次重要的爱情婚姻抉择,您怎么看?
    2014年到期的myeclipse5.5.1注冊码
    24点经典算法
    使用val()方法设置表单中的默认选中项
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/9021992.html
Copyright © 2011-2022 走看看