Python学习---递归函数的学习
定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返 回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)
实例1: (阶乘)
# 普通方法
def factorial(num):
fac = num
for i in range(1, num):
fac *= i
return fac
print(factorial(4)) # 递归实现
def factorial(num):
if num == 1: # 结束条件
return 1
return factorial(num - 1) * num
print(factorial(4)) # 函数式编程实现:
from functools import reduce
print (reduce(lambda x,y: x*y, range(1,5))) # 24
实例2:斐波那契数列
# 普通实现:
# 0 1 1 2 3 5 8 13
def fibo(n):
before = 0
after = 1
ret = 0
for i in range(n - 1):
ret = before + after
before = after
after = ret
return ret
print(fibo(6)) # 8 # 递归实现:
# 0 1 1 2 3 5 8 13
def fibo_new(n): # n可以为零,数列有[0]
if n <= 1: # 结束条件 f(0)=0,f(1)=1,f(2)=f(1)+f(0)-->符合return条件,所以<=1
return n
return (fibo_new(n - 1) + fibo_new(n - 2)) # f(8) = f(7) + f(6)
print(fibo_new(6)) # 8 # 其他实现
def fib(max):
n, b, a = 0, 0, 1
while n < max:
print(b)
b, a = a, b+a # 赋值是同时执行的
n += 1
fib(6) # 8
实例3:求number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]中的正数的平均值
# 递归实现
number = [2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]
count = 0
li = []
for i in range(len(number)):
if number[i] > 0:
li.append(number[i])
count += 1
count = str(count)
print("%s个正整数的和为%d" % (count, sum(li)))
# 函数式编程
# 待写
Python学习---递归函数的学习的更多相关文章
- Python框架之Django学习
当前标签: Django Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0 Python框架之Django学习笔记(十三) 尛 ...
- Python第十课学习
Python第十课学习 www.cnblogs.com/yuanchenqi/articles/5828233.html 函数: 1 减少代码的重复 2 更易扩展,弹性更强:便于日后文件功能的修改 3 ...
- Python第八课学习
Python第八课学习 www.cnblogs.com/resn/p/5800922.html 1 Ubuntu学习 根 / /: 所有目录都在 /boot : boot配置文件,内核和其他 linu ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Python入门到精通学习书籍推荐!
1.Python基础教程(第2版 修订版)<Python基础教程(第2版修订版)>包括Python程序设计的方方面面,内容涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合 ...
- python中confIgparser模块学习
python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...
- python全栈开发学习_内容目录及链接
python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...
- selenium + python自动化测试unittest框架学习(二)
1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...
- Python学习---Python下[元组]的学习
元组是不可变的, 用小括号()定义,而且一旦定义 ,不可变[类型是tuple] [元组看做一个整体,不可拆分,不可赋值,但可以全部重新赋值] 通过圆括号,用逗号分隔,常用在使语句或用户定义的函数能够安 ...
随机推荐
- 关于Sql注入的那些事
登陆注册应该是每一个网站的必做的业务,但是在选择使用Django中的ORM还是说执行原生的Sql语句不同的人应该会有不同的建议,有经验的开发人员都喜欢原生的sql语句,因为相对于ORM来说,执行效率高 ...
- linux下VI模式中上下左右键和回退键出现字母
1.编辑/etc/vim/vimrc.tiny 由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修改.很简单,这个文件里面的倒数第二句话是“se ...
- Python调用C++DLL函数出错String类型问题
调用c++ 函数原型如下,一直失败,请个日志断点发现 参数未能正确解析. int EXPORT init_ner(string cfg_path); typedef int (*Proc_init_n ...
- 005-C3P0连接池配置文件模板
文件名必须为:c3p0-config.xml 一般放在src目录下面 <?xml version="1.0" encoding="UTF-8"?> ...
- CentOS6.4 安装Redis
按照下面步骤依次执行1.检查依赖,安装依赖 [root@ecs-3c46 ~]# whereis gcc gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc ...
- Log4J2 配置文件模板及代码说明
Log4j是Apache的著名项目,随着Java应用的越来越广泛,对日志性能等方面的要求也越来越高.Log4j的升级版本Log4j2在前些年发布.Log4J2的优点和好处有很多,可以自行搜索查阅相关文 ...
- Java入门系列-14-深入类和对象
这篇文章用大量的代码帮你搞懂:值传递和引用传递.构造方法.方法重载.static关键字的使用 方法参数传递-值传递和引用传递 1.值传递 敲一敲: /** * 使用方法交换两个变量的值 * @auth ...
- java java-web linux C C++ 安装系统 数据结构 算法 教程分享
qq1206630874 v18455730857 免费分享
- 【转】HttpWebRequest 保持session
通过HttpWebRequest获取网页内容并保持session,最主要的就是存储cookie.这里使用了一个静态变量m_Cookie用来存储cookie的内容.第二次请求网页的时候把cookie传送 ...
- CORS跨域请求C#版
1.什么是跨域请求: 当从A网站使用AJAX请求B网站时,就会出现跨域请求. 此时B网站能够接收到A网站发来的请求并返回相应的结果,但是浏览器拿到B网站返回的数据时检测到与当前网站的域名不同,出于安 ...