用分治求最大值
补全 dmax:两边各自求出最大值,再取大的那个。 ⚠️ 这道题的"合"这一步不是相加,而是取较大的——同一套骨架,换个合并方式就换了用途。
分治的结果必须和直接算的一样
把 dsum 和 dmax 都写出来,和 Python 内置的 sum / max 比一比。 两个都对上输出 两项一致,否则输出 有不一致。
什么是递归树
递归树画的是【0】。
归并排序的递归树有多高
归并排序每次把问题砍一半,递归树的高度大约是【0】。
怎么从递归树估出复杂度
用递归树估算复杂度,做法是【0】。
阶乘的递归有多深
运行下面这段程序,它数的是"最深压了几层": MAXD = 0 def fact(n, d): global MAXD if d > MAXD: MAXD = d if n
汉诺塔三层要走几步
汉诺塔的递归是"先搬上面 n-1 个,搬一次最大的,再搬回来"。运行下面这段程序: MOVES = 0 def hanoi(n): global MOVES if n == 0: ret
数出递归有多深
补全 fact:算阶乘的同时记下最深压到了第几层。 算 5 的阶乘,输出最大深度。
数出汉诺塔要搬几次
补全 hanoi:搬 n 层要"先搬上面 n-1 层、搬一次最大的、再搬回 n-1 层"。 搬 3 层,输出一共搬了几次。
⚠️ 一次递归两个分支,代价就爆了
阶乘每层只递归一次,斐波那契每层递归两次——同样是 n = 20,调用次数差多少? 补全两个带计数的版本,把两个调用次数拼起来输出(阶乘在前,用 / 隔开)。