python递归函数

       递归函数简单来说就是函数的自我调用。使用递归函数很多时候可以使得代码简洁,优雅。可以把复杂的问题分解成简单的子问题。递归有无与伦比的魅力,从著名的计算机名言就可以看出递归的奇妙:

To iterate is human,to recurse divine. 
迭代者为人,递归者为神。 
– L. Peter Deutsch

  其实上面这句话有点夸张了,递归不是完美的,它也有致命的弱点,那就是执行效率低,而且容易导致栈溢出(超过一千次)。  

 

 下面我们从一副美妙的图来直观的体会一下递归。

 

我们用一个简单的实例来比较一下递归和迭代的区别:求N的阶乘

使用迭代的方法如下:

def jiecheng(n):result=1for i in range(n) :result*=(i+1)print('%d的阶乘为%d'%(n,result))

jiecheng(
5) #5的阶乘为120

 

使用递归的方法如下:

def jiecheng(n):if n==1:return 1else:return n*(jiecheng(n-1))

 

可以看出使用递归可以让代码更加简洁优雅,更加具有数学美。

 

下面再通过斐波那契数列来探讨一下递归:

1、通过循环实现:

 

a=0
b=1
while b < 100:print(b)a, b = b, a+b

 

 2、普通递归实现斐波那契数列:

1 ls=[]
2 for i in range(10):
3     if i==0 or i ==1:
4         ls.append(1)
5     else:
6         ls.append(ls[i-2]+ls[i-1])
7 print(ls)  #[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

 3、通过尾递归方式实现:

def fbnq(n,a,b):if n==0:return (b)else:return fbnq(n-1,b,a+b)
print([fbnq(i,0,1) for i in range(5)])

 这三种方法迭代效率其实是最高的,然后

转载于:https://www.cnblogs.com/linshuhui/p/8978086.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java知识体系 servlet_03-Servlet 体系结构知识梳理

一、Servlet体系结构Java Web应用是基于Servlet规范运行&#xff0c;Servlet顶层类的关联如下图&#xff1a;从图可看出&#xff0c;Servlet规范基本围绕这几个类运行&#xff0c;其中&#xff0c;与Servlet主动关联的有3个类&#xff0c;分别是ServletRequest、ServletRespons…

testlink自带java api_java如何连接testlink

1.下载相关的jar包2.获取到testlink的url和key&#xff0c;注意&#xff1a;url不是testlink的连接地址&#xff0c;是连接地址/lib/api/xmlrpc.php3.测试是否连接成功public static void main(String args[]) {String url "http://test.tl.gmsd.lan/lib/api/xmlrpc.php&…

lr背景虚化_lr背景虚化_怎样拍出背景模糊的照片

除了锐化之外&#xff0c;要获得独特的&#xff0c;令人难忘的图像&#xff0c;还可以使用其他方法&#xff0c;例如&#xff0c;相反的效果-单个细节的模糊。这样的方法将使人们有可能专注于整个构图的中心人物&#xff0c;为图片增加情感色彩&#xff0c;动作&#xff0c;并为…

在线五子棋JAVA网络编程_实验五 Java网络编程及安全

一、实验内容1&#xff0e;掌握Socket程序的编写&#xff1b;2&#xff0e;掌握密码技术的使用&#xff1b;3&#xff0e;设计安全传输系统。二、实验步骤1. 基于Java Socket实现安全传输2. 基于TCP实现客户端和服务器&#xff0c;结对编程一人负责客户端&#xff0c;一人负责服…

rnn中文语音识别java_语音识别算法阅读之RNN-T-2018

论文&#xff1a;EXPLORING ARCHITECTURES, DATA AND UNITS FOR STREAMING END-TO-END SPEECH RECOGNITION WITH RNN-TRANSDUCER,2018CTC的一个问题在于&#xff0c;其假设当前帧的输出与历史输出之间的条件独立性&#xff1b;RNN-T引入预测网络来弥补CTC这种条件独立性假设带来…

Storm环境搭建(分布式集群)

作为流计算的开篇&#xff0c;笔者首先给出storm的安装和部署&#xff0c;storm的第二篇&#xff0c;笔者将详细的介绍storm的工作原理。下边直接上干货&#xff0c;跟笔者的步伐一块儿安装storm。 原文链接&#xff1a;Storm环境搭建&#xff08;分布式集群&#xff09; Step1…

18.QT-QPlainEdit 信号与槽

QPlainEdit编辑功能 Public Slots void appendHtml ( const QString & html ) void appendPlainText ( const QString & text ) void centerCursor () void clear () void copy () void cut () void insertPlainText ( const QString & text ) void paste () void …

嘻嘻

今天我们来聊一下如何减肥&#xff1f; 其实我也不知道&#xff0c;嘻嘻~ 开个玩笑 好了&#xff0c;今天我们继续来学习新的知识。 在前两篇文章中&#xff0c;我们接触到了索引的概念&#xff0c;今天我们要对索引进行一个拓展。首先我们先来看一下下面这段代码&#xff1a; …

mysql :完整性约束

---恢复内容开始--- 一&#xff1a;介绍 约束条件与数据类型的宽度一样 &#xff0c;都是可选参数 作用&#xff0c;用于保证数据的完整性和 一致性 主要分为&#xff1a; primary key (pk) 标识该字段为该表的主键&#xff0c; 可以唯一的标识记录 foreign key &#xff08;fk…

php htts cookies,Http和Https下的cookie的写入问题

session和cookie是不一样的session存储在服务器,cookie存储在客户端设置cookie:function setcookie ($name, $value null, $expire null, $path null, $domain null, $secure null, $httponly null) {}获取cookie:$_COOKIE[$sCookieName];题主的写法只是操作了服务器端的…

java 做项目踩坑,web项目踩坑过程

sql函数设计&#xff1a;一开始本来是直接用Java的jdbc直接传输操作语句的。但后来学了存储过程发现存储过程可以提高不少的效率。就重构了自己对数据库的操作代码。包括&#xff1a;开启&#xff0c;查找&#xff0c;修改&#xff0c;关闭。开启&#xff1a;直接使用的构造函数…

matlab设计理想数字带通滤波器,基于matlab的数字带通滤波器课程设计报告

基于matlab的数字带通滤波器课程设计报告 1 西安文理学院机械电子工程系 课程设计报告 专业班级 08级电子信息工程1班 题 目 基于 MATLAB 的数字带通滤波器 学 号 学生姓名 指导教师 2011 年 12 月 西安文理学院机械电子工程系2 课程设计任务书 学生姓名 _______专业班级 _____…

xml序列号错误

xml序列号错误((XmlHelper.Deserialize))提示&#xff1a;XML 文档(1, 2)中有错误。{"不应有 <entryOrder xmlns>。"} 原因&#xff1a;1.缺少根目录&#xff08;<root>&#xff09;2.xml字段转换失败&#xff08;string->int&#xff09; ----------…

关于windows10 CMD 的一些操作

之前接触过cmd的一些操作方法&#xff0c;比如用dir、tasklist等一些方法&#xff0c;但是用了会立马忘记&#xff0c;再用到时又要重新google&#xff0c;这着实让我头痛&#xff01;&#xff01;&#xff01; 今天又碰到一个关于改变目录的问题&#xff0c;又是纠结万分&…

oracle dblink 验证,Oracle DBLINK 简单使用

oracle在进行跨库访问时&#xff0c;可以通过创建dblink实现&#xff0c;今天就简单的介绍下如果创建dblink&#xff0c;以及通过dblink完成插入、修改、删除等操作首先了解下环境&#xff1a;在tnsnames.ora中配置两个数据库别名&#xff1a;orcl(用户名&#xff1a;wangyong …

六、表达式:前缀后缀

count为运算后的值。 转载于:https://www.cnblogs.com/Strugglinggirl/p/9026856.html

ubuntu中安装hadoop集群

hadoop是由java 语言编写的主从结构分布式计算存储架构 准备工作&#xff1a; 操作系统&#xff1a; Ubuntu16.04 软件安装包&#xff1a;jdk-8u171-linux-x64.tar.gz &#xff1b; hadoop-2.6.5.tar.gz 配置环境&#xff1a;3台虚拟机 master:192.168.122.10node1 …

linux 内核3.8,[Beaglebone] BBB迁移到linux 3.8实时内核

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;动机之前使用TI SDK提供的3.2标准内核&#xff0c;在和fpga进行高速通信时出现CPU 100%中断响应延迟严重(偶尔>50ms)造成数据丢包。为达到严格的中断响应速度(&…

软考解析:2017年上半年下午试卷

软考解析&#xff1a;2017年上半年下午试卷 第一题&#xff1a;数据流图 第二题&#xff1a;数据库设计 第三题&#xff1a;面向对象开发 真题 理论 类图 状态图 解题思路 第四题&#xff1a;算法与数据结构 第五题&#xff1a;设计模式与Java转载于:https://www.cnblogs.com/…

PHP配置开发环境

PHP配置开发环境 1.建3个文件夹&#xff1a; 2&#xff1a;找到apache的安装包 3&#xff1a;可以随意写 4&#xff1a; 5&#xff1a;找到你的apache的路径 6&#xff1a;注意&#xff1a;不要解压到当前文件夹 7&#xff1a;剪切替换名字修改为php 8&#xff1a;在apache >…