python学习笔记9-函数递归调用(自己调用自己)
[root@localhost ~]# vim factorial.py #!/usr/bin/python def factorial(n): sum=1 for i in range(1,n+1): sum *=i return sum print factorial(5) [root@localhost ~]# python factorial.py 120
递归调用
递归注意事项:
必须有最后的默认结果 if n==0
递归参数必须向默认结果收敛的:factorical(n-1)
乘法递归
[root@localhost ~]# vim factorial.py #!/usr/bin/python def factorial(n): if n==0: return 1 else: return n * factorial(n-1) print factorial(5) [root@localhost ~]# python factorial.py 120
加法递归
[root@localhost ~]# vim factorial.py #!/usr/bin/python def factorial(n): if n==0: return 0 else: return n + factorial(n-1) print factorial(100) [root@localhost ~]# python factorial.py 5050
练习:递归列出目录里面的文件
[root@133 function]# vim recursion.py #!/usr/bin/python import os import sys def print_files(path): lsdir = os.listdir(path) #列出文件 dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))] #采用列表重写方法,isdir返回布尔值,判断后边是不是一个目录,是,返回True files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]#isfile返回布尔值,判断后边是不是一个文件,是,返回True if files: #判断文件有么有?没有的话是none,if none false,不执行,否则有文件,if files 为true,有的话把每个文件列出出来 for f in files: print os.path.join(path,f) #添加文件的路径,通过path和f找到文件路径: if dirs: #判断子目录有么有?没有子目录,if none返回false,有子目录,if dirs返回True,有的话把每个子目录调用递归函数 for d in dirs: print_files(os.path.join(path,d)) #添加目录的路径,通过path和d找到目录路径: print_files(sys.argv[1]) 这里使用了列表重新,举例: [i for i in range(10) if i%2==0] 这里我只要偶数的元素 [root@133 function]# python recursion.py /opt/python #sys.argv[1]是 /opt/python /opt/python/README.md /opt/python/function/def_function.py /opt/python/function/recursion.py /opt/python/function/factorial.py /opt/python/function/def_ifnumber.py /opt/python/function/global_inter.py /opt/python/function/return.py /opt/python/function/proc.py /opt/python/filevalue/2.py /opt/python/filevalue/mac.py /opt/python/filevalue/if.py