常见java问题——经典爬梯问题。

题目:假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?

分析题:假设爬n级阶梯一共有S(n)种方法,当爬到第n级台阶之前,我们只有两种情况,要么在第n - 1级台阶,要么在第n - 2级台阶。由此可以分析出:S(n) = S(n - 1)+S(n+2)。

非递归方式解答:

public class StairsTest
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        
        try
        {
            System.out.println("请输入梯子阶数:");
            
            int stairsNum = Integer.parseInt(scanner.nextLine());//梯子的阶数
            
            long f = 1;
            
            long f2 = 2;
            
            long result = 0;//n位爬楼梯方法数
            
            if(stairsNum == 1)
            {
                result = 1;
                
                System.out.println(result);
            }else
            {
                if(stairsNum == 2)
                {
                    result = 2;
                    
                    System.out.println(result);
                }else
                {
                    for(long i = 2;i < stairsNum;i++)
                    {
                        result = f + f2;
                        
                        f = f2;
                        
                        f2 = result;
                    }
                }
            }
            System.out.println(result);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            scanner.close();
        }
    }
}

递归方式解答:

public class RecursionStairsTest
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);

        try
        {
            System.out.println("请输入梯子阶数:");

            int stairsNum = Integer.parseInt(scanner.nextLine());// 梯子的阶数

            System.out.println(recursionTest(stairsNum));// 方法的结果
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            scanner.close();
        }
    }

    private static int recursionTest(int n)
    {
        if (n == 1)
        {
            return 1;
        }
        if (n == 2)
        {
            return 2;
        }
        return recursionTest(n - 1) + recursionTest(n - 2);
    }
}
递归的执行速度不及非递归的执行速度!速度相差10倍甚至更高!

转载于:https://www.cnblogs.com/javacatalina/p/6666983.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值