知识预览

  • 递归函数
  • 内建函数(Built-in Functions)
回到顶部

递归函数

定义:调用一个函数的过程中出现调用函数本身,成为函数的递归调用。

例1:

某公司四个员工坐在一起,问第四个人薪水,他说比第三个人多1000,问第三个人薪水,第他说比第二个人多1000,问第二个人薪水,他说比第一个人多1000,最后第一人说自己每月5000,请问第四个人的薪水是多少?

要知道第四个人的月薪,就必须知道第三个人的,第三个人的又取决于第二个人的,第二个人的又取决于第一个人的,而且每一个员工都比前一个多一千,数学表达式即:

salary(4)=salary(3)+1000
salary(3)=salary(2)+1000
salary(2)=salary(1)+1000
salary(1)=5000简化为:
salary(n)=salary(n-1)+1000 (n>1)
salary(1)=5000 (n=1)

其实,这就是一个递归函数,递归分为两个阶段:回溯和递推。

第n个员工的薪水表示为第(n-1)个学生的薪水,可第(n-1)个学生的薪水仍然不知道,所以继续回溯到第(n-2)个学生的薪水……直到第一个员工的薪水,此时,salary(1)已知不必再向前回溯了。然后开始第二个阶段:递推,从第一个员工的薪水可以推算出
第二个员工的薪水(6000),从第二个员工的薪水可以推算出第三个员工的薪水(7000)……一直推算出第第四个员工的薪水(8000)为止,递归结束。需要注意的一点是,递归一定要有一个结束条件,否则陷入无限死循环,这里salary(1)=5000就是结束条件。

流程图:

代码实现:

def salary(n):if n==1:return 5000return salary(n-1)+1000s=salary(4)
print(s)

例2: 通过递归求n的阶乘

分析其数学表达式为:

(1)factorial(n)=n*factorial(n-1)
(2)factorial(1)=1

代码实现:

def factorial(n):if n==1:return 1return n*factorial(n-1)print(factorial_new(3))

递归函数的优点: 定义简洁,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑处理会复杂一些。

递归特性:

  1. 必须有一个明确的结束条件

  2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少递归效率不高,递归层次过多会导致栈溢出(

  3. 在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返 回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

练习:通过循环和递归两种方式实现斐波那契数列

def fibo(n):before=0after=1for i in range(n-1):ret=before+afterbefore=afterafter=retreturn retprint(fibo(3))#**************递归*********************
def fibo_new(n):#n可以为零,数列有[0]if n <= 1:return nreturn(fibo_new(n-1) + fibo_new(n-2))print(fibo_new(3))
1
print(fibo_new(30000))#maximum recursion depth exceeded in comparison

View Code

回到顶部

内建函数(Built-in Functions)

abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()  
delattr() hash() memoryview() set()  

转载于:https://www.cnblogs.com/skyflask/articles/8282673.html

python之递归函数和内建函数相关推荐

  1. Python之递归函数

    前言 说到递归,如果是从其他编程语言转到 Python 的童鞋对这个词一定不会陌生,在很多情况下,使用递归可以提高程序的可读性,虽然可以完全避免编写递归函数,转而使用循环来代替,但是作为程序猿,至少必 ...

  2. python利用递归函数实现斐波那契数列_Python递归及斐波那契数列

    原博文 2016-07-01 23:30 − 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ...

  3. python基础——递归函数

    python基础--递归函数 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用 ...

  4. python的标准类型内建函数_Python随手笔记之标准类型内建函数

    Python提供了一些内建函数用于基本对象类型:cmp(),repr(),str(),type()和等同于repr()的(' ')操作符 (1)type() type的用法如下: type(objec ...

  5. python中递归函数写法_python中递归函数如何创建

    递归函数是编程技术之一,这意味着你的程序包含你自己调用的函数.与迭代函数一样,在多次执行类似处理时可以使用递归函数,但递归函数可以通过用简单的代码替换它们来处理更复杂的问题.本篇文章我们就来看看pyt ...

  6. python的递归函数

    递归函数简单的定义:1.函数调用自身函数的行为.2.有一个正确的返回条件 python的递归函数有默认递归深度且可以设置 以下几个算法实例可以更好的理解递归函数的定义和使用场景 例1,一个求阶乘的函数 ...

  7. python中递归函数写法_详解python中递归函数

    函数执行流程 def foo1(b,b1=3): print("foo1 called",b,b1) def foo2(c): foo3(c) print("foo2 c ...

  8. python中递归函数的实例_Python 递归函数详解及实例

    Python 递归函数 如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是 ...

  9. 汉诺塔游戏的python实现——递归函数

    汉诺塔游戏python实现 def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b ...

最新文章

  1. 2015 AlBaath Collegiate Programming Contest(2月14日训练赛)
  2. 呵呵,又在这里开了个博客,现在已经有好几个了
  3. Ant和Junit使用的一些问题
  4. 【Python】Pyecharts 组合图形绘制实践
  5. php artisan 命令
  6. 思科路由器NAT配置详解(转)
  7. 拖动同级别元素显示辅助线,辅助对齐,吸附.
  8. java 汉字拼音排序_Java汉字排序(2)按拼音排序
  9. python runner.daemonrunner_在python中将参数传递给daemon runner
  10. 通过一个IT管理服务提供商攻陷190个澳大利亚组织机构的邮件供应链
  11. 单元测试Error creating bean with name org.springframework.web.servlet.resource.Resource
  12. error: two or more data types in declaration specifiers原因及解决方法
  13. cad剖切线的快捷键_cad快捷键(最全CAD快捷键大全 )
  14. 锂电池充电管理芯片ic XSC01支持筋膜枪8.4V12.6V16.8充电
  15. ubuntu 键盘输入法为空_Ubuntu12下键盘输入中文设置 - 卡饭网
  16. 摄影测量中的什么是光流场_摄影中的“停止”是什么?
  17. hexo next主题去掉码市的Coding Pages等待页
  18. 如何看待清华段子手“毕导”毕啸天至今没有发表过高质量论文?
  19. 面试怎样做自我介绍?
  20. 3d点云与cad模型

热门文章

  1. CRM Transaction处理中的权限控制
  2. mysql 执行报错及解决方法 Multi-statement transaction required more than ‘max_binlog_cache_size‘
  3. java中的softreference_Java中的SoftReference和WeakReference有什么区别?
  4. numpy不用科学记数发 python_Python科学计算库Numpy常用的函数使用
  5. ubuntu下mysql编码格式设置_Ubuntu 16.04.1下修改MySQL默认编码
  6. php怎么实现商品评论功能,php购物车功能如何实现
  7. jsonarray转liast_jsonArray转换成List
  8. profile matlab,使用profile功能对Matlab性能调优
  9. mvc怎么套用html模板,ASP.NET MVC3模板页的使用(2)
  10. mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引