递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等
 
注意:
  - 必须有最后的默认结果
    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默认递归的深度不能超过100层
 

Python-函数的递归调用的更多相关文章

  1. 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用

    5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...

  2. day14 迭代器,生成器,函数的递归调用

    1.什么是迭代器 迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续 迭代取值的工具 2.为什么要用迭代器 迭代器的优点 ​ ①不依赖于索引取值 ​ ②更节省内存 缺点: ​ 1.不如按 ...

  3. python函数声明和调用(18)

    函数是指代码片段,可以重复调用,比如我们前面文章接触到的type()/len()等等都是函数,这些函数是python的内置函数,python底层封装后用于实现某些功能. 一.函数的定义 在Python ...

  4. c语言:函数的递归调用

    c语言可以将代码模块化,这是其很重要的一个特性. 说道代码模块化,我们很自然的就会联想到函数.而函数中,比较难的一个知识点就是函数的递归调用. 值得注意的是,函数的递归调用在现实工作并不是很常用,但是 ...

  5. Python函数学习——递归

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 函数实现过程 def calc(n): v = int(n//2) print(v) if v > ...

  6. Python 函数之递归

    递归函数定义 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 我们来计算阶乘 n! = 1 x 2 x 3 x ... x n ,用函数 fact(n) 表示 f ...

  7. C51函数的递归调用

    前几天在写C51程序时用到了递归,简单程序如下: void WRITE_ADD(uchar addr,uchar wbyte) { START(); //先发送起始信号 WRITE_BYTE(0xa0 ...

  8. [C++程序设计]函数的递归调用

    在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ...

  9. python手动设置递归调用深度

    python超出递归深度时会出现异常: RuntimeError: maximum recursion depth exceeded python默认的递归深度是很有限的,大概是900当递归深度超过这 ...

  10. Java中函数的递归调用

    说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...

随机推荐

  1. OperateLoger

    protected void Page_Load(object sender, EventArgs e) { OperateLoger.FunctionInfo =new FunctionInfo { ...

  2. xss之渗透测试

    跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...

  3. Active Record 数据迁移

    1.创建controler: welcome ;action: index $ rails generate controller welcome index 2.创建名为Article的model定 ...

  4. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  5. jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)

    今天学习jQuery,看到nth-child(even)用法,特意找了下这个选择器的用法,在CSS3标准中,用法很强大. 对此,我把CSS3标准中nth-child()用法大致介绍下: CSS3伪类选 ...

  6. gitlab使用个人版v16.11

    title: gitlab使用个人版v16.11 date: 2016-11-13 20:53:00 tags: [gitlab] --- 1.安装gitbash 附上地址链接:git 2.配置git ...

  7. fastcgi与cgi的区别

    fastcgi与cgi的区别 先讲下cgi:cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fo ...

  8. js_apply与call

    在ECAMScript3给Function的原型定义了两个方法,它们是Function.prototype.call和Function.prototype.apply. 本文详细介绍了apply与ca ...

  9. flask_sqlalchemy 乱码问题

    简言之, /etc/my.conf default_character_set=utf8 配置成了 default_character_set=utf-8 继而 sqlalchemy 创建表使用的字符 ...

  10. gdb 调试多线程

    基本i threads 等操作略过,只谈线程同步.异步控制: 先点到,gdb attach到主线程t1 时,所有线程都会停止,所谓同步异步效果,是指在apply continue到所有线程之后, 再切 ...