给定函数 climbStairs(int n) 的定义如下,则 climbStairs(5) 的返回的值是( )。
int climbStairs(int n) {
if(n <= 2) return n;
int a = 1, b = 2;
for(int i = 3; i <= n; i++) {
int temp = a + b;
a = b;
b = temp;
}
return b;
}答案B。>=是大于等于比较运算符,>>=是右移赋值运算符(a>>=3等价于a=a>>3)。两者都是合法的C++运算符。
>=是右移赋值运算符,不是比较运算符。a>>=3相当于a=a>>3,将a右移3位。
【考点】递推|迭代|斐波那契数列
GESP四级《递推与迭代》模块,卡住只会写通项公式、不会迭代的考生
命题人用斐波那契数列考你迭代实现,而非简单套公式
n≤2直接返回n,是边界条件反复跳过的典型陷阱
循环里a,b交替赋值,是迭代递推的模板代码
看到n≤2直接返回n,先锁定base case
循环里a,b交替赋值,是迭代递推的模板代码
每次i增加1,b就变成F(i),最终b=F(5)
斐波那契数列:1,2,3,5,8… 故n=5时答案为8
选A者把n当成答案,没看懂循环在算F(n)
选D者想成1+2+3+4+5=15,又强行凑成10
选C者误以为循环次数是n,算到F(7)=13
最阴险的是:i从3开始,循环仅执行n-2次
若把n≤2改成n≤1,base case就变了,答案会不同
若把循环改成累加,就考等差数列求和,而非斐波那契
刷到类似题,先问"命题人想考我什么"