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.pass.isdir()

    - 判断后面的文件是否是目录,是的话返回True(不能判断目录是否存在,不存在也会返回false)

  os.path.isfile()

    - 判断后面的文件是否是文件,是的话返回True(不能判断文件是否存在,不存在也会返回false)

  os.path.join()

    - 连接括号中的路径(文件)

    os.path.join(‘/etc/‘,‘passwd‘,‘abc‘) ----> /etc/passwd/abc

注意

  Python3默认递归的深度不能超过100层

时间: 2024-12-28 16:05:05

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

Python函数中多类型传值和冗余参数及函数的递归调用

1.多类型传值和冗余参数 多类型传值: def fun(x,y): return x +y print fun(3,5) 8 print fun(*t) 3 def fun(x,y,z): return x + y + z t1 = (1,2,3) fun(*t1) 6 fun(*(2,4,5)) 11 fun(1,*t) 4 print t (1, 2) fun(x=1,y=3,z=5) 9 >>> dic = {'x':1,'y':3,'z':6} >>> fun(

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

在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! 1 #include <iostream> 2 using namespace std; 3 4 long func(int n); 5 6 int main() 7 { 8 long c; 9 int x; 10 cout << "please enter a integer numbe

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

你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用 5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在PowerSum()函数中,又调用Power()函数和Add()函数来计算每个数的平方并将两个平方加和起来成为最终的结果.除此之外,在C++中还存在另外一种特殊的函数调用方式,那就是在一个函数内部调用它自己本身,这种方式也被

函数及递归调用介绍

java函数的基本结构 返回值类型 函数名(参数1,参数2){ 函数体 } 函数的四大部分:函数名,函数参数,函数体,返回类型 使用函数的好处 提高代码的复用性 便于程序分工协助开发 便于代码集中管理 /** * 写一个函数,产出多行* * @param n 打印n行* */ public static void printStar(int n,int m) { if(n>10000){return;} for(int i=0;i<n;i++) { for(int j=0;j<m;j++

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

5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在PowerSum()函数中,又调用Power()函数和Add()函数来计算每个数的平方并将两个平方加和起来成为最终的结果.除此之外,在C++中还存在另外一种特殊的函数调用方式,那就是在一个函数内部调用它自己本身,这种方式也被称为函数的递归调用. 函数的递归调用,实际上是实现函数的一种特殊方式.当递归函

函数的递归调用与二分法

一,什么是递归? 递归的作用可以完全取代循环,很多函数编程语言中习惯用递归来实现循环 1,递归算法: (1),'重复' ,凡是通过循环语句可以实现的,都可以用递归来实现 (2),'将问题分解成同类的子问题', 如持续循环的运算操作,持续循环的判断操作,他们的每次循环都是同样的一个'动作',这个动作就是一个子问题 2,函数的递归调用: 在调用一个函数的过程又直接或者间接的调用该函数本身,称之为递归调用. 递归必须满足两个条件: 1, 每进入下一次递归调用,问题的规模都应该有所减少 2, 递归必须有

python函数声明和调用(18)

函数是指代码片段,可以重复调用,比如我们前面文章接触到的type()/len()等等都是函数,这些函数是python的内置函数,python底层封装后用于实现某些功能. 一.函数的定义 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回:如果没有return语句,默认返回None: def functionname( parameters ): "函数说明" function_sui

python函数之递归

一.递归的定义 函数的递归就是在一个函数内调用这个函数本身,python默认递归的最大层数是997. 二.递归实现三级菜单 1 def threeLM(dic): 2 while True: 3 for k in dic:print(k) 4 key = input('input>>').strip() 5 if key == 'b' or key == 'q':return key 6 elif key in dic.keys() and dic[key]: 7 ret = threeLM(

函数的递归调用

递归调用即在定义函数的时候,在函数内部再调用自己,也就是函数自己调用自己,通常用于计算阶乘 注意一点的是,如果函数一直调用自己,那就成了死循环了,因此我们通常会设一个条件,当条件为假时函数就终止了 In [15]: def factorial(n): ....: if n == 0: ....: return 1 ....: else: ....: return n + factorial(n-1) ....: In [16]: factorial(5) # 计算 5+4+3+2+1 Out[1

协程函数、递归调用

1.消费者生产者模型初级 2.获取指定目录下子目录与文件 3.递归调用 --消费者生产者模型初级 def eater(name): print('%s start to eat' %name ) while True: food = yield print('%s eat %s' %(name,food)) alex_g = eater('alex')#先获得生成器 next(alex_g)#触发函数使函数暂停到函数的yield alex_g.send('骨头')#给yield发送个值,使yie