共63道题,当前是第50

Description

1	#include <iostream>
2	using namespace std;
3	int f(int n, int m) {
4	    if (n == 1) return m;
5	    if (m == 1) return n;
6	    int res = 0;
7	    for (int i = 1; i < n; i++)
8	        for (int j = 1; j < m; j++)
9	            res += f(i, j);
10	    return res;
11	}
12	int n, m;
13	int main() {
14	    cin >> n >> m;
15	    cout << f(n, m) << endl;
16	    return 0;
17	}

1. 错误。由于存在大量的重叠问题,所以计算 $f(n,m)$ 的时间复杂度远超 $O(nm)$。
2. 错误。即使去掉第 $4$ 行的代码,程序在 $m=1$ 时会返回 $n$,在 $n < 1$ 时会返回 $0$,所以不会无限递归下去。
3. 错误。即使同时去掉第 $4$ 行和第 $5$ 行的代码,程序在 $n < 1$ 和 $m < 1$ 时也会返回 $0$,所以不会无限递归下去。 
4. D。$f(5,6)=175$。
5. B。$f(100,2)=f(1,1)+f(2,1)+f(3,1)+...+f(99,1)=1+2+3+...+99=4950$。
6. B。需要注意的是,当去掉第 $4$ 行的代码后,边界条件是:当 $m=0$ 时返回 $n$,否则当 $n=1$ 时,$f(n,m)$ 返回 $0$,据此计算得到 $f(3,6)=7$。 

Question

计算 $f(n,m)$ 的时间复杂度为 $O(nm)$。( )

去掉第 $4$ 行的代码,程序将会不停地递归调用而不会返回结果。( )

同时去掉第 $4$ 行和第 $5$ 行的代码,程序将会不停地递归调用而不会返回结果。( )

当输入为 `5 6` 时,输出为( )。

当输入为 `100 2` 时,输出为( )。

当去掉程序中的第 $4$ 行,且输入为 `3 6` 时,输出为( )。