林老师 · 客观题题库 · 专题 13 递归与递推 · 复习强化

专题 13 递归与递推 · 复习强化

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题13递归与递推-复习强化
题目总数103 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 10 大部分,合计 103 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

递归基础

14 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

递归是通过( )来求解问题的编程技术。(2022 年真题)

(1 分)
第 2 题 A2 未作答

递归函数中终止条件(base case)的作用是( )。

(1 分)
第 3 题 A3 未作答

f(3) 调用 f(2) 调用 f(1)f(1) 返回后执行顺序是( )。

(1 分)
第 4 题 A4 未作答

递归函数在计算机内部通过( )管理调用。

(1 分)
第 5 题 A5 未作答

f(n) 调用 f(n-1) 直到 f(0),递归深度是( )。

(1 分)
第 6 题 A6 未作答

01int f(int n) { return f(n + 1); }

调用 f(0) 的结果是( )。

(1 分)
第 7 题 A7 未作答

递归函数设计时每层调用的参数必须( )。

(1 分)
第 8 题 A8 未作答

01int g(int n) {
02    if (n <= 0) return 0;
03    return g(n / 2) + n;
04}

g(7) 的返回值是( )。

(1 分)
第 9 题 A9 未作答

n=106n = 10^6 的递归求和应改用循环,主要原因是( )。

(1 分)
第 10 题 A10 未作答

尾递归是指( )。

(1 分)
第 11 题 A11 未作答

调试递归最有效的方法是( )。

(1 分)
第 12 题 A12 未作答

递归函数的标准代码结构是( )。

(1 分)
第 13 题 A13 未作答

递归的优点是( )。

(1 分)
第 14 题 A14 未作答

关于递归,错误的是( )。

(1 分)

递归代码阅读

16 QUESTIONS · 2 POINTS EACH
第 15 题 B1 未作答

01int s(int n) { if (n == 0) return 0; return n + s(n - 1); }

s(4) 的返回值是( )。

(1 分)
第 16 题 B2 未作答

01int f(int n) { if (n <= 1) return 1; return n * f(n - 1); }

f(5) 的返回值是( )。

(1 分)
第 17 题 B3 未作答

递归算法 XYZ(A[1..n]):如果 n=1n=1 返回 A[1]A[1];否则 temp ← XYZ(A[1..n-1]),如果 temp < A[n] 返回 temp 否则返回 A[n]。该算法输出的是( )。(2020 年真题)

(1 分)
第 18 题 B4 未作答

01int p(int a, int n) {
02    if (n == 0) return 1;
03    return a * p(a, n - 1);
04}

p(2, 3) 的返回值是( )。

(1 分)
第 19 题 B5 未作答

01solve(n)
02  if n<=1 return 1
03  else if n>=5 return n*solve(n-2)
04  else return n*solve(n-1)

solve(7) 的返回值是( )。(2021 年真题)

(1 分)
第 20 题 B6 未作答

01void p(int n) {
02    if (n == 0) { cout << "*"; return; }
03    p(n - 1);
04    cout << n;
05}

p(3) 输出( )。

(1 分)
第 21 题 B7 未作答

01int q(int a, int b) {
02    if (b == 0) return a;
03    return q(b, a % b);
04}

q(12, 8) 的返回值是( )。

(1 分)
第 22 题 B8 未作答

01int c(int n) {
02    if (n <= 1) return 1;
03    return c(n - 1) + c(n - 2);
04}

c(5) 的返回值是( )。

(1 分)
第 23 题 B9 未作答

01int s(int arr[], int n) {
02    if (n == 0) return 0;
03    return arr[n-1] + s(arr, n-1);
04}

int a[] = {1, 2, 3}; s(a, 3) 返回( )。

(1 分)
第 24 题 B10 未作答

01void rev(string& s, int l, int r) {
02    if (l >= r) return;
03    swap(s[l], s[r]);
04    rev(s, l + 1, r - 1);
05}

rev("abc", 0, 2) 后字符串变为( )。

(1 分)
第 25 题 B11 未作答

01int bs(int a[], int l, int r, int x) {
02    if (l > r) return -1;
03    int mid = (l + r) / 2;
04    if (a[mid] == x) return mid;
05    if (a[mid] > x) return bs(a, l, mid - 1, x);
06    return bs(a, mid + 1, r, x);
07}

此算法的递归深度(最坏情况)是( )。

(1 分)
第 26 题 B12 未作答

01int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }

gcd(48, 36) 递归调用了( )次。

(1 分)
第 27 题 B13 未作答

01int fib(int n) {
02    if (n <= 1) return n;
03    return fib(n-1) + fib(n-2);
04}

fib(5) 的总调用次数(含 fib(0)fib(5) 自身)是( )。

(1 分)
第 28 题 B14 未作答

01void hanoi(int n, char a, char b, char c) {
02    if (n == 0) return;
03    hanoi(n-1, a, c, b);
04    cout << a << "->" << c << " ";
05    hanoi(n-1, b, a, c);
06}

hanoi(2, 'A', 'B', 'C') 输出( )。

(1 分)
第 29 题 B15 未作答

01int f(int n) {
02    if (n > 2) { f(n / 2); cout << n << " "; }
03    else cout << n << " ";
04}

f(12) 输出( )。

(1 分)
第 30 题 B16 未作答

01int m(int a, int b) {
02    if (b == 1) return a;
03    return a + m(a, b - 1);
04}

m(3, 4) 的返回值是( )。

(1 分)

递归与分治

10 QUESTIONS · 2 POINTS EACH
第 31 题 C1 未作答

分治法的三个步骤是( )。

(1 分)
第 32 题 C2 未作答

分治与递归的关系是( )。

(1 分)
第 33 题 C3 未作答

分析递归复杂度的"递归树"方法核心是( )。

(1 分)
第 34 题 C4 未作答

f(n) 调用 f(n-1)(单分支、每层 O(1)O(1))的时间复杂度是( )。

(1 分)
第 35 题 C5 未作答

f(n) 调用 f(n/2)(单分支、每层 O(1)O(1))的时间复杂度是( )。

(1 分)
第 36 题 C6 未作答

fib(n) 调用 fib(n-1)fib(n-2)(双子树)的时间复杂度约是( )。

(1 分)
第 37 题 C7 未作答

归并排序的递归式是( )。

(1 分)
第 38 题 C8 未作答

快速排序最坏情况的递归式是( )。

(1 分)
第 39 题 C9 未作答

分治适用条件不包括( )。

(1 分)
第 40 题 C10 未作答

关于分治,错误的是( )。

(1 分)

递推基础

14 QUESTIONS · 2 POINTS EACH
第 41 题 D1 未作答

递推的定义是( )。

(1 分)
第 42 题 D2 未作答

递推与递归的关系是( )。

(1 分)
第 43 题 D3 未作答

递推 f(n)=f(n1)+3f(n) = f(n-1) + 3f(1)=1f(1) = 1f(5)=?f(5) = ?( )。

(1 分)
第 44 题 D4 未作答

递推 f(1)=1,f(2)=1f(1)=1, f(2)=1f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2)f(7)=?f(7) = ?( )。

(1 分)
第 45 题 D5 未作答

递推 f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2)f(1)=1,f(2)=1f(1)=1, f(2)=1 得斐波那契;改为 f(1)=1,f(2)=3f(1)=1, f(2)=3 得( )。

(1 分)
第 46 题 D6 未作答

递推编程的标准框架是( )。

(1 分)
第 47 题 D7 未作答

递推 f[0]=0,f[1]=1f[0]=0, f[1]=1f[i]=f[i1]+f[i2]f[i] = f[i-1] + f[i-2]f[6]=?f[6] = ?( )。

(1 分)
第 48 题 D8 未作答

递推 f(n)=2f(n1)f(n) = 2f(n-1)f(1)=1f(1)=1)的通项公式是( )。

(1 分)
第 49 题 D9 未作答

斐波那契 f(50)1.2×1010f(50) \approx 1.2 \times 10^{10}int(上限约 2.1×1092.1 \times 10^9)( )存下。

(1 分)
第 50 题 D10 未作答

递推 f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2) 只需前两项,不开数组只保留两个变量的做法叫( )。

(1 分)
第 51 题 D11 未作答

递推与动态规划的关系是( )。

(1 分)
第 52 题 D12 未作答

递推 f[i]=f[i1]+f[i2]f[i] = f[i-1] + f[i-2]i=?i = ? 开始循环(f[0]f[0]f[1]f[1] 已初始化)( )。

(1 分)
第 53 题 D13 未作答

递推 f(n)=3f(n1)f(n) = 3 \cdot f(n-1)f(0)=1f(0)=1),f(4)=?f(4) = ?( )。

(1 分)
第 54 题 D14 未作答

关于递推,错误的是( )。

(1 分)

斐波那契与变式

12 QUESTIONS · 2 POINTS EACH
第 55 题 E1 未作答

斐波那契数列的定义是( )。

(1 分)
第 56 题 E2 未作答

斐波那契 f(1)=1,f(2)=1f(1)=1, f(2)=1f(8)=?f(8) = ?( )。

(1 分)
第 57 题 E3 未作答

递推 f(1)=1,f(2)=2f(1)=1, f(2)=2f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2)f(6)=?f(6) = ?( )。

(1 分)
第 58 题 E4 未作答

递推 f(1)=2,f(2)=1f(1)=2, f(2)=1f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2)f(5)=?f(5) = ?( )。

(1 分)
第 59 题 E5 未作答

每次上 1122 阶台阶,上 nn 阶的方法数 f(n)=?f(n) = ?( )。

(1 分)
第 60 题 E6 未作答

每次上 112233 阶台阶,上 nn 阶的方法数递推是( )。

(1 分)
第 61 题 E7 未作答

long long 可存到 20!20!。斐波那契第( )项开始超 long long

(1 分)
第 62 题 E8 未作答

朴素斐波那契递归 fib(40) 在普通电脑上( )。

(1 分)
第 63 题 E9 未作答

斐波那契从递归 O(2n)O(2^n) 优化到迭代 O(n)O(n) 的关键是( )。

(1 分)
第 64 题 E10 未作答

Lucas 数列 L(1)=1,L(2)=3L(1)=1, L(2)=3L(n)=L(n1)+L(n2)L(n) = L(n-1) + L(n-2)L(5)=?L(5) = ?( )。

(1 分)
第 65 题 E11 未作答

斐波那契数列相邻两项的比值 f(n+1)f(n)\frac{f(n+1)}{f(n)} 趋近于( )。

(1 分)
第 66 题 E12 未作答

关于斐波那契数列,错误的是( )。

(1 分)

汉诺塔

10 QUESTIONS · 2 POINTS EACH
第 67 题 F1 未作答

汉诺塔问题:nn 个盘子从 A 移到 C(借助 B),每次移一个、大盘不能在小盘上面。至少需要( )次移动。

(1 分)
第 68 题 F2 未作答

汉诺塔递推 h(n)=2h(n1)+1h(n) = 2h(n-1) + 1h(1)=1h(1) = 1h(5)=?h(5) = ?( )。

(1 分)
第 69 题 F3 未作答

汉诺塔递归的正确代码结构是( )。

(1 分)
第 70 题 F4 未作答

汉诺塔 n=2n=2(A→C 借助 B),移动序列是( )。

(1 分)
第 71 题 F5 未作答

汉诺塔 n=3n = 3 至少需要( )次移动。

(1 分)
第 72 题 F6 未作答

汉诺塔递归 hanoi(n, src, tmp, tgt) 中第二参数和第三参数的含义是( )。

(1 分)
第 73 题 F7 未作答

汉诺塔的时间复杂度是( )。

(1 分)
第 74 题 F8 未作答

汉诺塔递归的正确性来自:把 nn 盘问题分解为( )。

(1 分)
第 75 题 F9 未作答

汉诺塔在竞赛中的典型意义是( )。

(1 分)
第 76 题 F10 未作答

关于汉诺塔,错误的是( )。

(1 分)

递归与递推互转

10 QUESTIONS · 2 POINTS EACH
第 77 题 G1 未作答

递归 f(n)=f(n1)+nf(n) = f(n-1) + nf(0)=0f(0)=0)改写为循环是( )。

(1 分)
第 78 题 G2 未作答

递推 f[i]=f[i1]+f[i2]f[i] = f[i-1] + f[i-2] 改写为递归是( )。

(1 分)
第 79 题 G3 未作答

递归相对递推的优缺点是( )。

(1 分)
第 80 题 G4 未作答

选择递归还是递推的主要依据是( )。

(1 分)
第 81 题 G5 未作答

递归深度 10610^6 的函数要避免栈溢出,正确做法是( )。

(1 分)
第 82 题 G6 未作答

用递推表填充替代递归的好处是( )。

(1 分)
第 83 题 G7 未作答

记忆化递归的核心是( )。

(1 分)
第 84 题 G8 未作答

斐波那契从递归转递推后时间复杂度从 O(2n)O(2^n) 变为( )。

(1 分)
第 85 题 G9 未作答

递推 f[i]=f[i1]×2f[i] = f[i-1] \times 2f[0]=1f[0]=1)转递归的正确写法是( )。

(1 分)
第 86 题 G10 未作答

关于递归与递推互转,错误的是( )。

(1 分)

倍增法

6 QUESTIONS · 2 POINTS EACH
第 87 题 H1 未作答

倍增法的核心思想是( )。

(1 分)
第 88 题 H2 未作答

快速幂 anmodma^n \bmod m 用倍增思想,复杂度是( )。

(1 分)
第 89 题 H3 未作答

倍增求 LCA 时 fa[j][u] 的含义是( )。

(1 分)
第 90 题 H4 未作答

倍增法预处理 nn 个结点、logn\log n 层跳转表的空间复杂度是( )。

(1 分)
第 91 题 H5 未作答

倍增预处理代码的核心递推是( )。

(1 分)
第 92 题 H6 未作答

关于倍增法,错误的是( )。

(1 分)

综合与易错

8 QUESTIONS · 2 POINTS EACH
第 93 题 I1 未作答

递归函数的终止条件( )。

(1 分)
第 94 题 I2 未作答

递推与递归的主要区别是( )。

(1 分)
第 95 题 I3 未作答

斐波那契递归 fib(30) 慢的原因是( )。

(1 分)
第 96 题 I4 未作答

汉诺塔 h(n)=2n1h(n) = 2^n - 1h(10)=?h(10) = ?( )。

(1 分)
第 97 题 I5 未作答

关于倍增,正确的是( )。

(1 分)
第 98 题 I6 未作答

递归深度 10510^5 的函数可能发生( )。

(1 分)
第 99 题 I7 未作答

递推 f(n)=f(n1)×2f(n) = f(n-1) \times 2f(0)=1f(0) = 1),f(10)=?f(10) = ?( )。

(1 分)
第 100 题 I8 未作答

关于递归与递推,错误的是( )。

(1 分)

真 题 演 练

3 QUESTIONS · 真题演练不计分
第 1 题 单选 未作答

AAnn 个实数的数组,考虑下面的递归算法:

XYZ(A[1..n])
1 if n = 1 then return A[1]
2 else temp ← XYZ(A[1..n-1])
3      if temp < A[n]
4          then return temp
5          else return A[n]

请问算法 XYZ 的输出是什么?( )

(0 分)
CSP-J 2020 · 单选 第6题 | 知识点 程序阅读与输出推断、递归、一维数组
第 2 题 单选 未作答

考虑如下递归算法

01solve(n)
02    if n<=1 return 1
03    else if n>=5 return n*solve(n-2)
04    else return n*solve(n-1)

则调用 solve(7) 得到的返回结果为( )。

(0 分)
CSP-J 2021 · 单选 第13题 | 知识点 程序阅读与输出推断、递归函数、递归
第 3 题 单选 未作答

以下对递归方法的描述中,正确的是:( )

(0 分)
CSP-J 2022 · 单选 第15题 | 知识点 递归函数、递归