python 函数递归调用_python学习笔记9-函数递归调用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值