递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等
 
注意:
  - 必须有最后的默认结果
    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. Openstack学习目录

    1.2016.12.27    ceph简介   crush算法    OSD(boject storage device)   Mds(cephfs) 使用cephfs时需要安装metadata s ...

  2. GIT文档

    GIT文档http://git.oschina.net/progit/http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c ...

  3. 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法

    适用所有用UC整合 阿里云提示漏洞: discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,.......... 漏洞名称:Discuz uc.key泄露导致代 ...

  4. HDU 1859

    #include <iostream> #include <cstdio> #include <algorithm> #include <vector> ...

  5. [Windows] win7 配置Java开发环境

    Installed Softwares Git for windows 64 bit Java 7 & 8 64 bit apache maven 3.3.3 Intellij Idea ID ...

  6. Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法

    Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...

  7. Redis实战阅读笔记——第二章

    在性能的要求下,如何获取重构之前的构件

  8. web性能优化

    常用方法 压缩源码和图片 JavaScript文件源代码:可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG图片可以根据具体质量来压缩为50%到70%,PNG可 以使用一些开源压缩软件来压缩 ...

  9. BLAST套件

    Blastn是将给定的核酸序列与核酸数据库中的序列进行比较: Blastp是使用蛋白质序列与蛋白质数据库中的序列进行比较,可以寻找较远的关系: Blastx将给定的核酸序列按照六种阅读框架将其翻译成蛋 ...

  10. C++ 与OpenCV 学习笔记

    联合体:当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union) 1. 联合体是一种结构: 2. 他的所有成员相对于基地址的偏移量均为0: 3. 此结构空间要大到足够容纳最&qu ...