怎么判断能不能递归

判断一个问题适不适合递归,先问【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 编译。)

开始练习 →

第四步加上记忆化

给斐波那契加上记忆化(命中缓存不计数),把 fib(6) 的结果和调用次数用 / 拼起来输出——和上一步对比一下。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

交付递归分治加记忆化

这是这条路线的最终作品。阶乘(记深度)、分治求和求最大、朴素斐波那契(计数)已经写好;补全记忆化斐波那契和循环版阶乘,然后一次验完五条:fact(5) 是 120 且最大深度 5;分治求和求最大都和标准库一致;朴素 fib(6) 是 8、调

开始练习 →

check 为什么用随机数据

真机题的 ~/check 每次都现造随机数据来跑你的程序,主要是因为【0】。

开始练习 →

递归快速幂补上出口

场景:实验机上 ~/work/rec/pow.cpp 用递归算 ab mod m,可一运行就崩溃(段错误)。 任务:给 pw 补上出口,让它对 b = 0 也算对。make 编译,./pow < sample.txt 自测。check

开始练习 →