给斐波那契加上记忆

补全 fib:算之前先查 memo,算完之后存进 memo。算 fib(30)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

数一数记忆化之后调了几次

下面的 fib 把计数写在了查表之前,命中缓存也被算了进去。把计数挪到查表之后,算 fib(6),输出 calls。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

记忆化到底省了多少

朴素版已经写好。补全记忆化版 fib_memo(命中不计数),各算一次 fib(20),把两个调用次数用 / 拼起来输出(朴素在前)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

记忆化不能改变结果

两个版本都写好了。比较两者对 fib(20) 的结果:一样输出 结果一致,否则输出 结果不一致。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

怎么判断能不能递归

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

开始练习 →

设计递归解法的顺序

第 1 步:出口:只剩一个就是它自己 第 2 步:左边两个合起来:取大的 第 3 步:右边两个也一样 第 4 步:最后两半再合一次 3 8 2 9 8 9 9 设计一个递归解法,最省事的顺序是【0】。

开始练习 →

两个分治结果对得上吗

运行下面这段程序: #include <algorithm> #include <iostream> #include <numeric> #include <string> #include

开始练习 →

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

最终作品第一步:写出 fact(阶乘),出口用 <= 而不是 ==。算 5 的阶乘。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第二步写一个分治

写出 dsum(分治求和),和 accumulate 比一比:一样输出 一致,否则输出 不一致。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第三步数出递归树的规模

写出带计数的朴素斐波那契,把 fib(6) 的结果和调用次数用 / 拼起来输出(结果在前)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →