zoukankan      html  css  js  c++  java
  • 常见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倍甚至更高!

  • 相关阅读:
    20180320作业2:进行代码复审训练
    20180320作业1:源代码管理工具调查
    软工作业PSP与单元测试练习
    软工课后作业01-P18第四题
    20180320作业2:进行代码复审训练
    判断传入的电子邮箱账号的正确性
    软工课后作业01-00365
    实现模块判断传入的电子邮箱账号的正确性
    个人介绍
    20180320作业2:进行代码复审训练
  • 原文地址:https://www.cnblogs.com/javacatalina/p/6666983.html
Copyright © 2011-2022 走看看