斐波那契数列

使用递归定义的最常见数学函数是 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》-递归的更多相关文章

  1. 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料

    像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介  · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ...

  2. 读《像计算机科学家一样思考python》——笔记

    这本书,完全是入门级的,特别简单,一天多就看完. 目录: 第二章 变量.表达式和语句 第三章: 函数调用 第四章: 案例研究:接口设计 第五章 条件与递归 第六章:有返回值的函数 第七章 迭代 第八章 ...

  3. 像计算机科学家一样思考python-第4章 案例研究:接口设计

    系统环境 ubuntu18 4.1turtle模块 模块一开始导入turtle模块就报错了 Python ( , ::) [GCC ] on linux Type "help", ...

  4. 像计算机科学家一样思考python-第3章 函数

    在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来“调用”这个函数 3.1函数调用 一个函数调用的例子 & ...

  5. 像计算机科学家一样思考python-第1章 程序之道

    1.7调试 程序是很容易出错的.因为某种古怪的原因,程序错误被称为bug,而查捕bug的过程称为调试(debugging). 一个程序中可能出现3种类型的错误:语法错误.运行时错误和语义错误.对它们加 ...

  6. 像计算机科学家一样思考python-第2章 变量、表达式和语句

    感想: 1.程序出现语义错误时,画状态图是一个很好的调试办法.打印出关键变量在不同代码处理后值的变化,就能发现问题的蛛丝马迹. 2.每当学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看 ...

  7. 《像计算机科学家一样思考Java》—— 读后总结

    本书属于入门级的Java书籍,与其他的向编程思想.核心技术不同的是,这本书不是按部就班的讲解java变成知识,而是随着语言的深入慢慢增加知识点. 这本书以一个语言开发者的角度,深入浅出的讲解了Java ...

  8. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

  9. Python递归_打印节点信息

    Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...

随机推荐

  1. pandas 从入门到遗忘

    读取大文件(内存有限): import pandas as pd reader = pd.read_csv("tap_fun_test.csv", sep=',', iterato ...

  2. 省选前的th题

    沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...

  3. js的append拼接html丢失css样式解决

    htmlApp += "<li id='leftli"+lunci+"'>"; htmlApp += "<span id='left ...

  4. (转) JVM——Java类加载机制总结

    背景:对java类的加载机制,一直都是模糊的理解,这篇文章看下来清晰易懂. 转载:http://blog.csdn.net/seu_calvin/article/details/52301541 1. ...

  5. 解决MATLAB出现"??? Undefined function or variable 'x'."的问题,一个等号引发的大战

    最近写了一段代码,一直弹出“??? Undefined function or variable 'x'.”这个错误.仔细检查了一下,发现是赋值的问题.比如下面两段代码 h=1 h=x h=1表示的是 ...

  6. Apache HTTP Server应用的几个场景

    Apache HTTP Server应用的几个场景 前言 尽管Apache具有重量级.耗资源.低性能(相比其它的WebServer)的特点,但是同时它也具有兼容性强.稳定性高.模块丰富等特点,且处理动 ...

  7. 3分钟学会sessionStorage用法

    前言: 因最近移动端开发过程中遇到一个运营提出的所谓技术难点需求,对于原生APP来说轻而易举,毕竟自己的APP用户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对于一个爱研究攻克这些前端棘手问题的 ...

  8. ELK技术实战-安装Elk 5.x平台

    ELK技术实战–了解Elk各组件   转载  http://www.ywnds.com/?p=9776 ELK技术实战-部署Elk 2.x平台 ELK Stack是软件集合Elasticsearch. ...

  9. 易捷支付完整业务流程的lr脚本编写

    业务流程:1.注册2.登录3.重置支付密码4.下订单5.支付订单6.查看订单列表 通用md5.h代码如下: #ifndef MD5_H #define MD5_H #ifdef __alpha typ ...

  10. JavaSE学习总结(六)——接口、抽象类、内部类

    一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1; /**动物园*/ public class Zoo { public static void ...