📂
CS-NoteBook
  • Introduction
  • CS144
    • concise introduction to Internet
      • 1.1 Networked Applications
      • 1.2 The 4 Layer Internet
      • 1.3 IP
      • 1.4 A Day in the Life of a Packet
      • 1.5 Principle: Packet Switching
      • 1.6 Principle:Layering
      • 1.7 Principle: Encapsulation
      • 1.8 Byte order and packet formats
      • 1.9 name and addresses:IPv4
      • 1.10 Longest Prefix Match for Link Layer
      • 1.11 Address Resolution Protocol(ARP)
      • 1.12 Summary
    • Transport Layer
      • 2.1 The TCP Service Model
      • 2.2 UDP service model
      • 2.3 ICMP(Internet Control Message Protocol 互联网报文控制协议)
      • 2.4 The End-to-End Principle
      • 2.5 Error Detection:3 schemes (Checksum,CRC and MAC)
      • 2.6 Finite State Machines(有限状态机)
      • 2.7 Flow Control
      • 2.8 Sliding window
      • 2.9 Retransmission Strategies
      • 2.10 TCP Header
      • 2.11 TCP Setup and Teardown
      • 2.12 Recap
    • Package Switching
      • 3.1 The history of Internet
      • 3.2 What is packet switching
      • [3.3 End-to-end delay and Queueing delay
      • 3.4 Playback Buffer(回放缓存区)
  • CS 61C
    • 1.4 C Memory Mangement, Usage
    • 1.5 Intro to Assembly Language, MIPS Intro
    • 1.5 extra bits operation
  • CS 61B
  • CS 61A
    • Function
    • Names
    • The Art of the Function
    • Control
    • Higher-Order Function
    • Recursive Function
    • List
    • Non-Local Assignment
    • Iterators
    • Objects
    • Data Abstraction
    • OOP
    • Inheritance
    • Representations
    • Decomposition
    • Scheme
    • Exceptions
    • Calculator
    • Interpreters
    • Declarative_Programming
    • Table
    • Aggregation
      • More_recursion
    • Databases
    • Distributed_Data
    • Tail Recursion
    • Exercises
      • lab00
      • lab01
      • hw01
      • tree Recursion example -- give Change
  • The Web DevelopMent Bootcamp
    • html5
    • css
    • bootstrap3
    • bootstrap4
    • javascript expression
    • javascript function
Powered by GitBook
On this page
  • 环境图中的递归
  • 循环 vs 递归
  • 对待递归的方法
  • 相互递归 (mutual recursion)
  • 把递归转化为迭代
  • 把迭代转化为递归
  • 树递归

Was this helpful?

  1. CS 61A

Recursive Function

自己调用自己 function 在被调用时除了 return 前都不会离开这个 function

步骤:

  • 计算 base cases (不用递归)

  • 计算 recursive cases (用递归)

环境图中的递归

  • 相同的 function 被多次调用

  • 不同的 frames 每次跟踪不同的 arguments

  • arguments 的值取决于当前的环境

  • 每次调用解决一个比之前调用时的更简单的问题

循环 vs 递归

  • 循环是递归的特殊形式

  • 运用的公式有区别

对待递归的方法

  • 检验 base case

  • 把递归的方法视为一个方法上的抽象

  • 假设递归 f(n-1) 是正确的,检验 f(n) 是否正确

相互递归 (mutual recursion)

function A 调用 function B,function B 调用 function A 应用:

  • 信用卡校验和

  • 检验一个数奇数还是偶数

  • 两个人互相玩游戏

把递归转化为迭代

  • 会很 tricky

    • 因为迭代是递归的特殊形式

  • 要知道迭代需要保持什么状态

把迭代转化为递归

  • 更加直接,更泛用化

    • 因为迭代是递归的特殊形式

  • 迭代时候的状态可以被作为 arguments 传递至递归方法

树递归

树递归函数视为探索各种可能性的方法

  • 一个函数多次调用自身

  • 如果两个递归相同,更短的会更好

  • 但有些时候,更长的会更好(有清楚的递归递终止条件)

  • 当写递归时,把 base cases 放在最上面

PreviousHigher-Order FunctionNextList

Last updated 4 years ago

Was this helpful?