现有n个阶梯,你有两种上法,一次走一步或着走两步,问一共有多少种上法

探讨了经典的N阶台阶上法计数问题,通过列举和观察规律,介绍了递归和迭代两种算法实现方式,对比了它们的时间复杂度和内存占用。

问现在有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),并且不占内存,但代码稍长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值