《像计算机科学家一样思考Python》-递归
斐波那契数列
使用递归定义的最常见数学函数是 fibonacci (斐波那契数列),见其 定义
fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(n) = fibonacci(n − 1) + fibonacci(n − 2)Python代码:
def fibonacci (n) :
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)
fibonacci(5)调试
将一个大程序分解为较小的函数为调试生成了自然的检查点。如果一个函数不如预期
的运行,有三个可能性需要考虑:
• 该函数获得的实参有些问题,违反先决条件。
• 该函数有些问题,违反后置条件。
• 返回值或者它的使用方法有问题。
PS:
前置条件( precondition):用例在调用某个方法时必须满足的条件。
后置条件(postcondition):实现在方法返回时必须达到的要求。
副作用(side effects):方法可能对对象产生的任何其他变更。代码:
def factorial (n):
    space = '␣' * (4 * n )
    print ( space , 'factorial ', n )
    if n == 0:
        print ( space , 'returning ␣1')
        return 1
    else:
        recurse = factorial (n-1)
        result = n * recurse
        print ( space , 'returning ', result )
        return result
factorial(5)
效果:
space 是一个空格字符的字符串,用来控制输出的缩进。下面是 factorial(4) 的输出结果:
C:\Users\xxx\Desktop>f.py
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ factorial  5
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ factorial  4
␣␣␣␣␣␣␣␣␣␣␣␣ factorial  3
␣␣␣␣␣␣␣␣ factorial  2
␣␣␣␣ factorial  1
 factorial  0
 returning ␣1
␣␣␣␣ returning  1
␣␣␣␣␣␣␣␣ returning  2
␣␣␣␣␣␣␣␣␣␣␣␣ returning  6
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ returning  24
␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ returning  120《像计算机科学家一样思考Python》-递归的更多相关文章
- 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料
		像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介 · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ... 
- 读《像计算机科学家一样思考python》——笔记
		这本书,完全是入门级的,特别简单,一天多就看完. 目录: 第二章 变量.表达式和语句 第三章: 函数调用 第四章: 案例研究:接口设计 第五章 条件与递归 第六章:有返回值的函数 第七章 迭代 第八章 ... 
- 像计算机科学家一样思考python-第4章 案例研究:接口设计
		系统环境 ubuntu18 4.1turtle模块 模块一开始导入turtle模块就报错了 Python ( , ::) [GCC ] on linux Type "help", ... 
- 像计算机科学家一样思考python-第3章 函数
		在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来“调用”这个函数 3.1函数调用 一个函数调用的例子 & ... 
- 像计算机科学家一样思考python-第1章 程序之道
		1.7调试 程序是很容易出错的.因为某种古怪的原因,程序错误被称为bug,而查捕bug的过程称为调试(debugging). 一个程序中可能出现3种类型的错误:语法错误.运行时错误和语义错误.对它们加 ... 
- 像计算机科学家一样思考python-第2章 变量、表达式和语句
		感想: 1.程序出现语义错误时,画状态图是一个很好的调试办法.打印出关键变量在不同代码处理后值的变化,就能发现问题的蛛丝马迹. 2.每当学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看 ... 
- 《像计算机科学家一样思考Java》—— 读后总结
		本书属于入门级的Java书籍,与其他的向编程思想.核心技术不同的是,这本书不是按部就班的讲解java变成知识,而是随着语言的深入慢慢增加知识点. 这本书以一个语言开发者的角度,深入浅出的讲解了Java ... 
- 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法
		几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ... 
- Python递归_打印节点信息
		Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ... 
随机推荐
- pandas 从入门到遗忘
			读取大文件(内存有限): import pandas as pd reader = pd.read_csv("tap_fun_test.csv", sep=',', iterato ... 
- 省选前的th题
			沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ... 
- js的append拼接html丢失css样式解决
			htmlApp += "<li id='leftli"+lunci+"'>"; htmlApp += "<span id='left ... 
- (转) JVM——Java类加载机制总结
			背景:对java类的加载机制,一直都是模糊的理解,这篇文章看下来清晰易懂. 转载:http://blog.csdn.net/seu_calvin/article/details/52301541 1. ... 
- 解决MATLAB出现"??? Undefined function or variable 'x'."的问题,一个等号引发的大战
			最近写了一段代码,一直弹出“??? Undefined function or variable 'x'.”这个错误.仔细检查了一下,发现是赋值的问题.比如下面两段代码 h=1 h=x h=1表示的是 ... 
- Apache HTTP Server应用的几个场景
			Apache HTTP Server应用的几个场景 前言 尽管Apache具有重量级.耗资源.低性能(相比其它的WebServer)的特点,但是同时它也具有兼容性强.稳定性高.模块丰富等特点,且处理动 ... 
- 3分钟学会sessionStorage用法
			前言: 因最近移动端开发过程中遇到一个运营提出的所谓技术难点需求,对于原生APP来说轻而易举,毕竟自己的APP用户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对于一个爱研究攻克这些前端棘手问题的 ... 
- ELK技术实战-安装Elk 5.x平台
			ELK技术实战–了解Elk各组件 转载 http://www.ywnds.com/?p=9776 ELK技术实战-部署Elk 2.x平台 ELK Stack是软件集合Elasticsearch. ... 
- 易捷支付完整业务流程的lr脚本编写
			业务流程:1.注册2.登录3.重置支付密码4.下订单5.支付订单6.查看订单列表 通用md5.h代码如下: #ifndef MD5_H #define MD5_H #ifdef __alpha typ ... 
- JavaSE学习总结(六)——接口、抽象类、内部类
			一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1; /**动物园*/ public class Zoo { public static void ... 
