什么是递归算法?

  -- 函数自己调用自己本身

  -- 本质上return返回的时候,总是把一个参数传入到自己函数本身,让函数反复调用下去

递归有何特点?

  -- 必有一个结束条件

    没有结束条件,递归就没有任何意义,python中默认只能999层递归

    递归过多栈溢出,报错

  -- 效率不高

    相对而言,对于正向递归,递归次数和循环次数一致,没有区别

    对于逆向递归,要递归到最后才能得到确定的值,然后从最底层返回

    一次是递归到结束值,一次从结束值返回到初始值

  --

如何正向递归实现斐波那契数列?

#!/usr/bin/python3

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' list_fab = [1, 1] # 定义接收值的列表 def fab(u, n_1, n_2): # u表示获取几个fab值
n_3 = n_1 + n_2 # n_3 每次都等于前面两个数之和
print(n_1, n_2, n_3) # 打印每次递归这3个值
list_fab.append(n_3) # 把每次递归得到的n_3值添加列表中
if u == 1: # 设置结束条件,把列表返回回去,本质上也是递归深度
return n_3 # 返回最后一个值
return fab(u-1, n_2, n_3) # 本质上还是实现了往后移一位,递归深度为u if __name__ == '__main__':
result = fab(10, 1, 1) # 传入初始值
print(result) # 本质上就包含初始值1,1 ,list_fab中有u+2个值,但是添加进去只有u个值
print(list_fab) # 打印结果

如何逆向递归实现斐波那契数列?

#!/usr/bin/python3

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' list_fab = [] # 定义接收值的列表 def fab(n_3, n_2):
n_1 = n_3 - n_2 # n_1 每次都等于 n_3 - n_2
print(n_1, n_2, n_3) # 打印每次递归这3个值
list_fab.insert(0, n_1) # 把每次递归得到的n_1值添加列表中最前面
if n_1 == 1: # 设置递归结束返回条件
return 1 # 返回最后一个值
return fab(n_2, n_1) # 本质上实现了 n_2 = n_3 , n_1 = n_2,逆向移动了一位 if __name__ == '__main__':
result = fab(144, 89) # 传入初始值
print(result) # 打印递归最后返回的参数
print(list_fab)

  

python_递归_斐波那契的更多相关文章

  1. python_实现_斐波那契额函数

    在学递归的时候,用递归实现了一个 下面是代码 def fib(n): if n >= 3: return fib(n-1)+fib(n-2) else: return 1 print(fib(6 ...

  2. Python_案例_斐波那契数

    方法一: 1 #!/usr/bin/python3 2 3 # Fibonacci series: 斐波纳契数列 4 # 两个元素的总和确定了下一个数 5 a, b = 0, 1 6 while b ...

  3. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  4. Python递归及斐波那契数列

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...

  5. 【递归】斐波那契数列第n个数

    递归.递推计算斐波那契数列第n项的值: #include <stdio.h> long long fact(int n); //[递推]计算波那契数列第n个数 long long fact ...

  6. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...

  7. python递归与非递归实现斐波那契数列

    1.题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 递归实现: class Solution(): def Fibnacci(self ...

  8. Go指南练习_斐波纳契闭包

    源地址 https://tour.go-zh.org/moretypes/26 一.题目描述 让我们用函数做些好玩的事情. 实现一个 fibonacci 函数,它返回一个函数(闭包),该闭包返回一个斐 ...

  9. scala -- 递归 实现 斐波那契函数

    求一个起始为0,1,1,2,3的斐波那契序列 def main(args: Array[String]): Unit = { def fib(n: Int): Int = { if (n == 1) ...

随机推荐

  1. 【转】npm使用过程中的一些错误解决办法及npm常用命令

    原文 node,npm在前端开发流程中提供了非常完善的自动化工具链,但是同样由于其复杂性导致有很多奇奇怪怪的问题.本文将记录使用过程中出现的一些问题及其解决方法备案. 国内由于gfw问题,导致很多国外 ...

  2. WinForm响应式布局设计实践

    引言 创建响应式WinForm应用程序并不那么简单. 响应式布局,在此我指的是应用程序在不同屏幕分辨率下的可用性. 对于WinForm应用程序,我们需要明确地根据分辨率来调整控件的大小和重新定位. 虽 ...

  3. linux之 NFS服务器与客户端的安装与配置

    今天实验室需要搭建NAS,我负责的是NFS的安装与配置,现将整理的文档分享一下: 参考一:Linux下rpm 安装包方式安装 http://linux.chinaunix.net/techdoc/be ...

  4. Linux常用命令之文件处理命令

    注:由于Linux操作系统有些目录不能轻易操作,特此建议大家在家目录home,或root.tmp目录下练习命令,以免带来不必要的损失 一.查询目录中的内容:ls 命令格式:ls [选项] [文件或目录 ...

  5. 【Core2.0帮助类】

    缓存帮助类(CacheHelper) /// <summary> /// 缓存帮助类 /// </summary> public class CacheHelper {//下载 ...

  6. java调用c++函数的简单笔记

    java使用jni调用c++动态库函数. 步骤: 1.编写java测试代码如下: public class CallNativeDemo { native void func(); native do ...

  7. Ubuntu环境下IPython的搭建和使用

    1. Ubuntu操作系统版本 说明:Ubuntu 12.04.3 LTS自带的Python 2.7.3版本. 2. 安装IPython 说明: 输入命令sudo apt-get install ip ...

  8. HUST 1583 长度单位

    1583 - 长度单位 时间限制:1秒 内存限制:128兆 536 次提交 103 次通过 题目描述 我们生活中常用的长度单位有英尺.英寸和厘米,众所周知它们之间的换算关系每英寸等于3厘米,而每英尺等 ...

  9. bzoj:3392: [Usaco2005 Feb]Part Acquisition 交易

    Description     奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过N(1≤N≤50000)颗行星,在行星上进行交易.为了方便,奶牛们已经给可能出现的K(1≤K≤1000)种货物 ...

  10. HDU5131-Song Jiang's rank list HDU5135-Little Zu Chongzhi's Triangles(大佬写的)

    Song Jiang's rank list Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java ...