常见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