题目:假设你现在正在爬楼梯,楼梯有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倍甚至更高!