问现在有N级台阶,你每次可以选择上一步或者上两步,问一共多少种上法?
这是常见的面试题之一,类似的还有生兔子问题,首先我们先来看一看解题的思路,有N级台阶,有两种上法,一次走一步或着一次走两步,如果N小的话,可以用列举法,当N越大的时候,就不好列举了,所以我们需要找到它的规律,从而找到解题思路。首先我们可以先列举一下N较小数字时,看能不能找到规律。

知道思路之后,我们便可以很轻松的把他转化为代码了
C语言实现代码:
递归实现:
public static int F(int n){
if (n<2) return n;
int x = f(n-1)+f(n-2);
return x;
}
迭代实现:
public static int F(){
if(n <= 2) return n;
if first = 1,second = 2;
int third = 0;
for(int i = 3;i <= n;i++){
third = first+second;
first = second;
second = third;
}
return third;
}
JAVA实现代码:
递归实现:
public static int F(int n) {
if(n == 1) {
return 1;
}else if(n == 2){
return 2;
}else {
int f = 0;
f = F(n-1)+F(n-2);
return f;
}
递归代码优化:
public static int F(int n) {
if(n == 1 || n == 2) {
return n;
}else {
return F(n-1)+F(n-2);
}
}
循环代码实现
public static int F(int n) {
int f = 0;
if(n == 1 || n == 2) {
return n;
}else {
int x = 1;
int y = 2;
for (int i = 3; i <= n; i++) {
f = x+y;
x = y;
y = f;
}
}
return f;
}
优缺点:
递归算法:优点在于自身调用自身代码少,但是时间复杂度高,为O(2^n),占内存。
顺序算发:优点为时间复杂度低,为O(n),并且不占内存,但代码稍长。
探讨了经典的N阶台阶上法计数问题,通过列举和观察规律,介绍了递归和迭代两种算法实现方式,对比了它们的时间复杂度和内存占用。

2635

被折叠的 条评论
为什么被折叠?



