java实现<爬梯子>问题

参考博文:

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);
       
				
	}

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值