java递归解决39级台阶

期末复习递归时想到39级台阶这道题。

 
package recurion;

/**
 * @author hpc
 * @Date:2018-6-27下午7:18:32
 * 功能:递归实现39级台阶问题,由于左脚开始右脚结束所以总步数为偶数。
 */
public class TaiJie_39 {
	
	static int count = 0;//设置成员变量对走的步数计数,初始值为0.
	
	public static void main(String[] args) {
		
		f(39,0);
		
		System.out.println(count);
	}
	static void f(int stairs,int steps){
		
		if(stairs<0)return;
		
		if(stairs==0){//如果还剩的台阶数是0,则表示走完了,则对总步数是否是偶数进行判断
			
			if(steps%2==0){//如果是偶数,count加一
				
				count++;
			}
			return;
		}	
		f(stairs-1,steps+1);
		f(stairs-2,steps+1);//剩下的stairs如果不是0的话有两种走法
	}
}

 

package recurion;

/**
 * @author hpc
 * @Date:2018-6-27下午7:18:32
 * 功能:递归实现39级台阶问题,由于左脚开始右脚结束所以总步数为偶数。
 */
public class TaiJie_39 {
	
	static int count = 0;//设置成员变量对走的步数计数,初始值为0.
	
	public static void main(String[] args) {
		
		f(39,0);
		
		System.out.println(count);
	}
	static int f(int stairs,int steps){
		
		if(stairs==1){
			
			if(steps%2!=0){
				
				return count++;
			}
			else
				return 0;
		};
		if(stairs==0){
			
			if(steps%2==0){
				
				return count++;
			}
			else
				return 0;			
			
		}	
		return f(stairs-1,steps+1)+f(stairs-2,steps+1);
	}
}

因为左脚先上最后以右脚结束,所以必定是偶数步,这是最终的判断条件。以四个台阶为例,根据递归查找最终有两种可能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值