python之递归函数和内建函数
知识预览
- 递归函数
- 内建函数(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))
递归函数的优点: 定义简洁,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑处理会复杂一些。
递归特性:
必须有一个明确的结束条件
每次进入更深一层递归时,问题规模相比上次递归都应有所减少递归效率不高,递归层次过多会导致栈溢出(
在计算机中,函数调用是通过栈(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之递归函数和内建函数相关推荐
- Python之递归函数
前言 说到递归,如果是从其他编程语言转到 Python 的童鞋对这个词一定不会陌生,在很多情况下,使用递归可以提高程序的可读性,虽然可以完全避免编写递归函数,转而使用循环来代替,但是作为程序猿,至少必 ...
- python利用递归函数实现斐波那契数列_Python递归及斐波那契数列
原博文 2016-07-01 23:30 − 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ...
- python基础——递归函数
python基础--递归函数 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用 ...
- python的标准类型内建函数_Python随手笔记之标准类型内建函数
Python提供了一些内建函数用于基本对象类型:cmp(),repr(),str(),type()和等同于repr()的(' ')操作符 (1)type() type的用法如下: type(objec ...
- python中递归函数写法_python中递归函数如何创建
递归函数是编程技术之一,这意味着你的程序包含你自己调用的函数.与迭代函数一样,在多次执行类似处理时可以使用递归函数,但递归函数可以通过用简单的代码替换它们来处理更复杂的问题.本篇文章我们就来看看pyt ...
- python的递归函数
递归函数简单的定义:1.函数调用自身函数的行为.2.有一个正确的返回条件 python的递归函数有默认递归深度且可以设置 以下几个算法实例可以更好的理解递归函数的定义和使用场景 例1,一个求阶乘的函数 ...
- python中递归函数写法_详解python中递归函数
函数执行流程 def foo1(b,b1=3): print("foo1 called",b,b1) def foo2(c): foo3(c) print("foo2 c ...
- python中递归函数的实例_Python 递归函数详解及实例
Python 递归函数 如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是 ...
- 汉诺塔游戏的python实现——递归函数
汉诺塔游戏python实现 def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b ...
最新文章
- 2015 AlBaath Collegiate Programming Contest(2月14日训练赛)
- 呵呵,又在这里开了个博客,现在已经有好几个了
- Ant和Junit使用的一些问题
- 【Python】Pyecharts 组合图形绘制实践
- php artisan 命令
- 思科路由器NAT配置详解(转)
- 拖动同级别元素显示辅助线,辅助对齐,吸附.
- java 汉字拼音排序_Java汉字排序(2)按拼音排序
- python runner.daemonrunner_在python中将参数传递给daemon runner
- 通过一个IT管理服务提供商攻陷190个澳大利亚组织机构的邮件供应链
- 单元测试Error creating bean with name org.springframework.web.servlet.resource.Resource
- error: two or more data types in declaration specifiers原因及解决方法
- cad剖切线的快捷键_cad快捷键(最全CAD快捷键大全 )
- 锂电池充电管理芯片ic XSC01支持筋膜枪8.4V12.6V16.8充电
- ubuntu 键盘输入法为空_Ubuntu12下键盘输入中文设置 - 卡饭网
- 摄影测量中的什么是光流场_摄影中的“停止”是什么?
- hexo next主题去掉码市的Coding Pages等待页
- 如何看待清华段子手“毕导”毕啸天至今没有发表过高质量论文?
- 面试怎样做自我介绍?
- 3d点云与cad模型
热门文章
- CRM Transaction处理中的权限控制
- mysql 执行报错及解决方法 Multi-statement transaction required more than ‘max_binlog_cache_size‘
- java中的softreference_Java中的SoftReference和WeakReference有什么区别?
- numpy不用科学记数发 python_Python科学计算库Numpy常用的函数使用
- ubuntu下mysql编码格式设置_Ubuntu 16.04.1下修改MySQL默认编码
- php怎么实现商品评论功能,php购物车功能如何实现
- jsonarray转liast_jsonArray转换成List
- profile matlab,使用profile功能对Matlab性能调优
- mvc怎么套用html模板,ASP.NET MVC3模板页的使用(2)
- mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引