跨过出口走了多少层
下面的 down 出口是 n == 0,每次却减 2。为了不真的把栈压爆,程序加了一根「保险丝」:进了 50 次以上就强行返回。运行下面这段程序: #include <algorithm> #include <iostre
给漏了出口的递归补上出口
下面这个 fact 漏了出口——原样运行会一直递归下去,把栈压爆,程序以段错误崩溃。补上出口,然后算 5 的阶乘。 (本题用 g++ -std=c++17 -O0 编译。)
出口有了但参数没变小
下面这个递归有出口,却还是停不下来——往下递归时传的还是原来那个 n,原样运行同样会栈溢出崩溃。把它改对,然后算 5 的阶乘。 (本题用 g++ -std=c++17 -O0 编译。)
分治的三步
第 1 步:要对这 5 个数做分治 第 2 步:拆:从中间切成两半 第 3 步:每一半再往下切 第 4 步:切到只剩一个:直接得到答案 第 5 步:合:两半的结果再并回去 17 24 15 13 23 分治法的三步是【0】。
分治比普通递归多了哪步
分治比普通递归多的那一步是【0】。
哪个不是分治
下面这几个里,不算分治的是【0】。
分治求和得多少
把数组一分为二各自求和再相加,区间写成半开区间 [l, r)。运行下面这段程序: #include <algorithm> #include <iostream> #include <numeric> #
分治求最大值
运行下面这段程序: #include <algorithm> #include <iostream> #include <numeric> #include <string> #include
用分治求和
补全 dsum:把区间 [l, r) 从中间切开,两边各自递归求和,再把两个结果加起来。 (本题用 g++ -std=c++17 -O0 编译。)
用分治求最大值
补全 dmax:两边各自求出最大值,再取大的那个。这道题的「合」不是相加,而是取较大的——同一套骨架,换个合并方式就换了用途。 (本题用 g++ -std=c++17 -O0 编译。)