第四课 函数抽象与递归简介

2016-10-10

  • We have assignment,conditionals,I/O,looping constructs (for,while)

  • A language is Turing complete 一个语言应该是图灵完备的,就是说可以写出任何程序。(但不是可以easily写出任何程序)

  • 串行化编程,代码不易阅读,尤其是代码量很大的时候

  • We don't have Decomposition 分解, Abstraction抽象

  • 分解将代码模块化

  • 抽象让我们忽略细节

  • Functions

    • break up into modules

    • suppress detail 忽略细节

    • create "new primitives" 本质是提供一种创建原语的思考方式

    • 函数的目的是寻找计算的共同模式

    • 加减乘除也是原语,是函数

    • 抽象化,要规格化

  • def --keyword

  • Name(x)--define formal parameters 形参

  • return --keyword 控制转移

  • None --special vale

  • 每个分支都应该有个return

  • Invoke function by passing in values for the parameters

    • sqrt(16)

    • Binds x to 16 -- local只在本地有效

    • ans is also bound local

    • Local binding do not affect global bindings.

  • Interpretes -- global bindings

  • Call function

    • local table

  • 此处画图展示,外部变量和函数内变量赋值不影响

  • 函数的规范说明,说明函数的用法,抽象,不需要细节

    Farmyard problem

    • 20 heads , 56 legs 鸡兔同笼问题

    • numP + numC = 20

    • 4numP + 2numC = 56

    • emumerate & check 列举和和验证

    • 就是brute-force algorithm 穷举算法

    • 如果扩展到三种,pigs, chickens, spiders

  • 链表和数组很像

  • Recursion 递归

    • 很方便的编程思想,在分解程序时也很有用

    • 将问题分解成同样的小问题

    • base case -- simplest possible solution

    • inductive step 归纳法的步骤

      • break problem into a simple version of same problem and some other steps

  • 判断字符串是否回文

  • 把问题分解成越来越简单的问题

  • 代码要可收敛

  • 经典问题 Fibonacci Numbers 兔子问题

    • Pairs(0) = 1

    • Pairs(1) = 1

    • Pairs(n) = Pairs(n-1) + Pairs(n-2)

  • 递归,有继承意义的迭代程序。

  • 有些问题可以容易想出递归的方法,但是不容易想出迭代的方法,自己选择正确的

Last updated