• 常见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倍甚至更高!

  • 相关阅读:
    android.graphics(2)
    Android 性能优化:字体 (为自定义字体提供字体内存缓存)
    管道相关函数(1)-pipe
    【译】用boosting构建简单的目标分类器
    Ubuntu下matlab快捷键设置
    mysql导入sql文件,乱码,一个例子
    PHOG特征
    图像卷积、相关以及在MATLAB中的操作
    matlab实现hog特征
    操蛋的CTex
  • 原文地址:https://www.cnblogs.com/javacatalina/p/6666983.html
Copyright © 2020-2023  润新知