交付:递归 + 分治 + 记忆化

交付:递归 + 分治 + 记忆化

这是这条路线的最终作品。把阶乘、分治求和求最大、朴素与记忆化斐波那契全写出来,然后一次验完五条: fact(5) 是 120,递归最大深度是 5 分治求和求最大都和内置 sum / max 一致 朴素

阅读更多 →
第四步:加上记忆化

第四步:加上记忆化

给斐波那契加上记忆化(命中缓存不计数),把 fib(6) 的结果和调用次数拼起来输出。 ——和上一步的 25 次对比一下。

阅读更多 →
第三步:数出递归树的规模

第三步:数出递归树的规模

写出带计数的朴素斐波那契,把 fib(6) 的结果和调用次数拼起来输出(结果在前,用 / 隔开)。

阅读更多 →
第二步:写一个分治

第二步:写一个分治

写出 dsum(分治求和),和内置 sum 比一比。 一样输出 一致,否则输出 不一致。

阅读更多 →
第一步:写一个带出口的递归

第一步:写一个带出口的递归

最终作品第一步:写出 fact(阶乘),出口用 <= 而不是 ==。 算 5 的阶乘。

阅读更多 →
这两个分治结果对得上吗

这两个分治结果对得上吗

运行下面这段程序: def dsum(a): if len(a) == 0: return 0 if len(a) == 1: return a[0]

阅读更多 →
设计递归解法的顺序

设计递归解法的顺序

设计一个递归解法,最省事的顺序是【0】。

阅读更多 →
拿到一个新问题,怎么判断能不能递归

拿到一个新问题,怎么判断能不能递归

判断一个问题适不适合递归,先问【0】。

阅读更多 →
记忆化不能改变结果

记忆化不能改变结果

把朴素版和记忆化版都写出来,比较两者对 fib(20) 的结果。 一样输出 结果一致,否则输出 结果不一致。

阅读更多 →
⚠️ 记忆化到底省了多少

⚠️ 记忆化到底省了多少

把朴素版和记忆化版都写出来(各自带一个计数器),算 fib(20),把两个调用次数拼起来输出(朴素在前)。

阅读更多 →