数一数记忆化之后调了几次
补全带记忆的 fib,并只在真正计算时把 CALLS 加一(命中缓存不算)。 算 fib(6),输出 CALLS。
阅读更多 →
给斐波那契加上记忆
补全 fib:算之前先查 MEMO,算完之后存进 MEMO。 算 fib(30)——朴素写法这个规模已经很吃力了。
阅读更多 →
⚠️ 记忆化之后只调用几次
给斐波那契加上记忆化。运行下面这段程序: CALLS = 0 MEMO = {} def fib(n): global CALLS if n in MEMO: ret
阅读更多 →
什么样的递归值得记忆化
记忆化只在【0】的时候有用。
阅读更多 →
记忆化在做什么
记忆化(memoization)的做法是【0】。
阅读更多 →
⚠️ 两种写法结果一样,栈深差 5 倍
把递归版和循环版都写出来,把三样东西拼起来输出(用 / 隔开):两个结果是否相等、递归版的最大深度、循环版的最大深度。
阅读更多 →
把递归斐波那契改成循环
补全 fib_loop:用循环算第 n 个斐波那契数。 ⚠️ 循环版没有重复计算——这正是它比朴素递归快的原因。
阅读更多 →
把递归阶乘改成循环
补全 fact_loop:用循环算阶乘,不许递归。 算 5 的阶乘。
阅读更多 →
循环版压了几层栈
运行下面这段程序,它数的是"最深压了几层": MAXD = 0 def fact_loop(n, d): global MAXD if d > MAXD:
阅读更多 →
循环版算出来一样吗
运行下面这段程序: def fact(n): if n <= 1: return 1 return n * fact(n - 1) def fact_loop(
阅读更多 →