函数f 定义如下:
int f (int n) {
if (n <= 1) return 1;
else if (n % 2 == 0) return f(n/2);
else return f(3n - 1);
}
假设可以将任意大的整数作为参数传递给函数,请考虑以下语句。
1.函数f 在 n ≥ 1 的有限多个不同值处终止。 ii.函数f 终止于无穷多个不同的 n ≥ 1 值。三、函数f 不会因 n ≥ 1 的有限多个不同值而终止。四、函数f 不会因 n ≥ 1 的无限多个不同值而终止。以下哪个选项是正确的?
(A) (i) 和 (iii)
(B) (i) 和 (iv)
(C) (ii) 和 (iii)
(D) (ii) 和 (iv)答案: (D)
说明:该函数对所有因子为 2 {(2.x)2==0} 的值终止
所以,(i)是假的,(ii)是真的。
让 n = 3,它将在第二次迭代中终止。
让 n=5,它会变成 5 – 14 – 7 – 20 – 10 – 5 – 现在它会重复。
任何因子为 5 和 2 的数字,都有无限递归可能。
因此,(iv) 为真,(iii) 为假。这个问题的测验