python 递归函数与循环的区别_提升Python效率之使用循环机制代替递归函数

斐波那契数列

当年,典型的递归题目,斐波那契数列还记得吗?

def fib(n):

if n==1 or n==2:

return 1

else:

return fib(n-1)+fib(n-2)

当然, 为了程序健壮性,加上try...except...

def fib(n):

if isinstance(n, int):

print('兄弟,输入正整数哈')

return

try:

if n==1 or n==2:

return 1

elif n <= 0:

print('兄弟别输入0或负数呀')

else:

return fib(n-1)+fib(n-2)

except RecursionError:

print('兄弟,超过了最大递归深度'

是的,无论时间还是空间复杂度,递归真的是不太好使哈!这是递归的写法:

def fib(n):

if n==1 or n == 2:

return 1

a, b = 1, 1

for i in range(2, n):

a, b = b, a+b

return b

我稍微解释三点:

为啥是range(2, n),因为,斐波那契数列从 1 开始,所以 fib(n) 就是数列的第 n 项

由于前两项都为 1 ,所以要少两项,为 range(2, n)(要循环 n-2 次)

a, b = b, a+b 这里你也许也有困惑,我简单说说,一般Python解释器会将逗号分隔的变量直接看做一个元组,

又因为,解释器先执行等式右边的,所以,这样相当于 元组拆包

a, b = b, a+b 这句话的精髓在于,在等式右边将 b 视为fib(n-2) ,将 a+b 视为 fib(n-1)

杨辉三角

同样,先写递归写法(我这里不考虑特殊情况了,时间有限):

def YH_tri(a, b):

if a == b or b == 0:

return 1

else:

return YH_tri(a-1, b)+YH_tri(a-1, b-1)

老铁们自己先想想该怎么写??

总结

以上所述是小编给大家介绍的提升Python效率之使用循环机制代替递归函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文标题: 提升Python效率之使用循环机制代替递归函数

本文地址: http://www.cppcns.com/jiaoben/python/266539.html

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

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

相关文章

03_JS数据类型

JS数据类型 基本数据类型 String 字符串类型&#xff0c;申明时用单引号或双引号引起来&#xff0c;两种引号不可嵌套&#xff0c;不可混用 Number 数值型&#xff0c;有两个特殊的数字 Infint:无穷大NaN&#xff1a;非数值型数字&#xff0c;不与任何类型相等 Boolean …

7.5

姓名 崔巍 时间 2016年7月5日 学习内容 最后一次确定同步控制力度等实现细节。 学习了Visual Studio C#软件测试方面的工具。巩固了等价类黑盒测试方法的相关理论&#xff0c;并且学习了集成测试、回归测试的相关内容&#xff0c;并进行了测试。 集成测试&#xff0c;…

python scratch ev3_如何在scratch上连接乐高ev3?

乐高教育的官网有关于EV3使用Python的详细介绍https://education.lego.com/zh-cn/support/mindstorms-ev3/python-for-ev3​education.lego.com来自网易有道Scratch是现在小朋友们最热的编程工具&#xff0c;也是各学校和培训机构对小学生编程的入门首选。网易有道Kada平台是一…

04_JS运算符

JS运算符 一元运算符 -,正负号&#xff0c;对非数值类型做正负操作会先转换成数值型&#xff0c;可以用快速进行类型转换 逻辑运算符 且 &&&#xff0c;从左到右看&#xff0c;一旦返现值为false的表达式立刻返回false&#xff0c;全真为真或 ||&#xff0c;从左到右…

C语言 第八章 函数、指针与宏

一、函数 函数是一个包含完成一定功能的执行代码段。我们可以把函数看成一个"黑盒子", 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。函数提供了编制程序的手段,使之…

ByteBuffer用法小结

在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道…

promise用法_Promise的秘密

写在前面本篇文章将会带大家从分解promise入手&#xff0c;一步步实现一个promise。但阅读之前需要比较熟练地了解了解用法&#xff0c;结合用法看文章可能更容易理解。结构先看一下简单的用法。const promise new Promise((resolve, reject) > {setTimeout(() > {resol…

SpringMVC视图解析器(转)

前言 在前一篇博客中讲了SpringMVC的Controller控制器&#xff0c;在这篇博客中将接着介绍一下SpringMVC视图解析器。当我们对SpringMVC控制的资源发起请求时&#xff0c;这些请求都会被SpringMVC的DispatcherServlet处理&#xff0c;接着Spring会分析看哪一个HandlerMapping定…

05_JS流程控制语句

JS流程控制语句 顺序结构 选择结构 if-else语句 var aprompt(); var bprompt(); var cprompt(); if(a && b || c){alert(); }else if(a || b || c){alert(); }else{alert(); }条件分支语句 var aprompt(); switch(a){case 1:alert("1");break;case 2:al…

ForkJoinPool 学习示例

在JAVA7之前&#xff0c;并行处理数据非常麻烦。第一&#xff0c;你得明确把包含数据的数据结构分成若干份。第二&#xff0c;你要将每个子部分分配给一个独立的线程。第三&#xff0c;你要在恰当的时候对它们进行同步避免不希望的竞争条件&#xff0c;等待所有线程完成&#x…

python深入_Python深入(上)

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01;到现在为止&#xff0c;Python学习已经可以告一段落。下面的部分&#xff0c;我想讨论Python的高级语法和底层实现。这一部分的内容并不是使用Pyt…

06_JS对象

JS对象 创建对象 构造函数&#xff1a;var obj new Object()对象字面量&#xff1a;var obj {}; 不同&#xff1a;对象字面量可以在创建的同时为对象设置属性&#xff0c;最后一个属性后面不要加逗号 对象操作 添加属性&#xff1a;对象名.新属性名 值修改属性&#xf…

BZOJ4107 : [Wf2015]Asteroids

首先将速度相减&#xff0c;变成A在动而B不动&#xff0c;若速度为0则显然永远不会相交。 枚举A的每个点以及B的每条线段&#xff0c;计算这三个点共线的时刻。 将时刻排序&#xff0c;对于每个区间进行三分&#xff0c;用半平面交计算相交面积。 注意特判相交面积为0但是存在交…

Web Service 性能测试工具比较

背景 希望选择一款Web Service性能测试工具&#xff0c;能真实模拟大量用户访问网站时的请求&#xff0c;从而获取服务器当前的请求处理能力&#xff08;请求数/秒&#xff09;。以微信服务器为例&#xff0c;每个用户用独立的登录token&#xff0c;做各种操作&#xff0c;比如…

python中的常量是什么意思_第14p,Python中的常量与注释。

大家好&#xff0c;我是杨数Tos&#xff0c;这是《从零基础到大神》系列课程的第14篇文章&#xff0c;第二阶段的课程&#xff1a;Python基础知识&#xff1a;常量与注释。学习本课程&#xff0c;建议先看一遍&#xff1a;【计算机基础知识】课程。一、Python中的常量1、什么是…

07_JS函数

JS函数 函数声明 使用构造函数 var fun new Function();使用关键字 function 函数名(形参){// 函数体 }匿名函数 var fun1 function(){name "fun1" }函数参数 实参&#xff0c;形参都可以是任意数据类型&#xff0c;浏览器执行时不会检查实参类型和数量&…

cocoapods的安装(这真是一个神奇的东西,每次安装的方法都不一样,而且很容易出现各种各样的错误)...

文章开始之前&#xff0c;建议安装一个显示网速的插件&#xff0c;不然你不知道到底有没有下载&#xff0c;也让生活有一点盼头 1.因为众所周知的原因&#xff08;我dang的行为真的是让人失望&#xff09;&#xff0c;先更换一下ruby镜像源 $ gem sources --remove https://rub…

转】MyEclipse使用总结——在MyEclipse中设置jsp页面为默认utf-8编码

原博文出自于&#xff1a;http://www.cnblogs.com/xdp-gacl/p/3496161.html        感谢&#xff01; 在MyEclispe中创建Jsp页面&#xff0c;Jsp页面的默认编码是“ISO-8859-1”&#xff0c;如下图所示&#xff1a; 在这种编码下编写中文是没有办法保存Jsp页面的&#…

sum怎么用python_python sum()函数和.sum(axis=0)函数的使用

参考&#xff1a;《Machine Learning in Action》第二章#####################################################################sum函数&#xff1a;sum()函数是内建函数help(sum)函数功能&#xff1a;返回一个数字序列(非字符串)的和&#xff0c;并加上参数start的值(默认为…

08_JS工厂方法和构造函数

工厂方法和构造函数 工厂方法 工厂方法用来批量产生对象 function CreatCar(name,prase){// new 一个对象var obj new Object();obj.name name;obj.parse prase;obj.print function(){console.log(this.name " : " this.parse)};// 返回对象return obj; };va…