参考博文:
http://blog.csdn.net/feixiaoxing/article/details/6871148
问题:
有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法?
思路:每步所在的楼梯第n层,要么从第n-2层爬过来,要么从第n-1层爬过来,除此之外别无其他状态。
所以可以采用递归的思想,从上向下依次处理。
运行结果截图:
完整代码:
package edu.ynu.test;
import java.util.Enumeration;
import java.util.Stack;
public class jumpLadder {
/*
* @layer 所在楼梯index
* @stack 用于保存每一步的状态
* @top 步数
*/
public static void jump_ladder(int layer,Stack<Integer> stack,int top)
{
//楼层参数合法
if(layer<=0)
return;
if(layer==1)
{
printStack( stack,1);
}
if(layer==2)
{
printStack( stack,2);
}
_jump_ladder(layer,stack,1,top);
//***防止堆栈累计压入数据***
while(stack.size()>top)
{
stack.pop();
}
_jump_ladder(layer,stack,2,top);
}
//每一步的相应处理
public static void _jump_ladder(int layer,Stack<Integer> stack,int decrease,int top)
{
top++;//步数加1
stack.push(decrease);//压栈
layer=layer-decrease;//减去每部的状态(采用从上向下的方式)
jump_ladder(layer,stack,top);//递归
}
/*
* 打印堆栈
*/
public static void printStack(Stack<Integer> stack,int last)
{
System.out.print("# "+last+" ");
if(stack.empty())
System.out.print(" ");
else
{
//显示枚举所有stack中的元素
Enumeration<Integer> items=stack.elements();
while(items.hasMoreElements())
System.out.print(items.nextElement()+" ");
}
System.out.println("#");
}
/**
* @author wxx
* 问题:有一个人准备开始爬楼梯,假设楼梯有n个,
* 这个人只允许一次爬一个楼梯或者一次爬两个楼梯,
* 请问有多少种爬法?
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int Layer=6;//楼层数
Stack<Integer> stack=new Stack<Integer>();//声明堆栈
System.out.println("该楼层共有 "+Layer+" 级台阶");
System.out.println("\n所有的爬法如下:");
jump_ladder(Layer,stack,0);
}
}