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 放在最上面
Last updated
Was this helpful?