`

某人1次可以走1个,2个或3个台阶,写程序计算走N个台阶的各种走法。

阅读更多
在java eye论坛上看到的,
大致意思是:
某人1次可以走1个,2个或3个台阶,写程序计算走N个台阶的各种走法。
试了一下,很简单。
package interest.chess;

import java.util.LinkedList;
import java.util.List;


/**
 * 某人1次可以走1个,2个或3个台阶
 * 写程序计算走N个台阶的各种走法。
 * 
 * @time: Nov 4, 2010 5:23:18 PM
 * @author suntao19830709@gmail.com
 */
public class Test {
	public static void main(String[] args) {
		int n = 5;
		List<String> stepHis = new LinkedList<String>();
		System.out.println("总共方法有" + go(n, stepHis) + "种。");
	}
	
	/**
	 * 计算要走的步数,并保存在stepHis种
	 * @param steps 还有多少步要走
	 * @param number 走法的数目
	 * @param stepHis 保存该种走法的列表
	 * @return 总共走法数
	 */
	public static int go(int steps, List<String> stepHis){
		int thisNumber = 0;
		//剩余步数为0,那么可以把之前记录的his都打出来了
		if(steps == 0){
			if(stepHis.size()>0){
				thisNumber++;
			}
			printHis(stepHis);
		}else{
			//如果步数超过1,2或3,那么减掉该步骤,继续算剩余步数的走法
			for(int i = 1; i <=3; i++ ){
				if((steps - i) >= 0){
					List<String> thisStepHis = (List<String>)((LinkedList<String>)stepHis).clone();
					thisStepHis.add(i + ",");
					thisNumber += go(steps-i, thisStepHis);
				}
			}
		}
		
		return thisNumber;
	}
	/**
	 * 打印步数
	 * @param stepHis
	 */
	public static void printHis(List<String> stepHis){
		for(String str : stepHis){
			System.out.print(str);
		}
		System.out.println();
	}
}
分享到:
评论
4 楼 suntao19830709 2010-12-10  
dengzhangtao 写道
suntao19830709 写道
dengzhangtao 写道
能给解释一下吗,  为什么

你得先告诉别人解释哪里?不会是全部要解释吧?

怎么理解,你写的递归。。??
我这里不是很理解。


如果每次都可以走i个台阶(i为1或2或3)
步骤一:只要N大于i,N个台阶的走法总是可以转化成先走i个台阶,再走(N-i)个台阶。
步骤二:然后用N代替N-i,重复步骤一。

另外,上面注释有的比较老了,忘了删。
例如 @param number 走法的数目
3 楼 dengzhangtao 2010-12-02  
suntao19830709 写道
dengzhangtao 写道
能给解释一下吗,  为什么

你得先告诉别人解释哪里?不会是全部要解释吧?

怎么理解,你写的递归。。??
我这里不是很理解。
2 楼 suntao19830709 2010-12-02  
dengzhangtao 写道
能给解释一下吗,  为什么

你得先告诉别人解释哪里?不会是全部要解释吧?
1 楼 dengzhangtao 2010-12-01  
能给解释一下吗,  为什么

相关推荐

    阶梯 问题

    某人上楼梯,他一步可以迈一个台阶,两个台阶或三个台阶,共有n个台阶,编程输出他所有可能上法。如:有4个台阶,输出应是: 1 1 1 1 1 1 2 1 2 1 1 3 2 1 1 2 2 3 1 算法设计: 给定台阶的个数n,输出所有可能的上法...

    爬楼梯问题 C#版本源码

    //例如,楼梯有3级台阶,小明每一步可以爬1级、2级或3级,则小明一共有4种爬法。 //如果n的取值从32~36,m的取值从2~3,请写程序输出每种情况下小明有多少种爬楼梯的方法。 //输入格式:共2行数据,内容如下: /...

    阶梯问题递归求解

    某人上楼梯,他一步可以迈一个台阶,两个台阶或三个台阶,共有n个台阶,编程输出他所有可能上法。由文件input.txt 提供输入数据。文件的第1 行是台阶个数n(n≤10)。将计算出的所有可能上法分行输出到文件output....

    scratch少儿编程逻辑思维游戏源码-工厂逃生.zip

    scratch少儿编程逻辑思维游戏源码-工厂逃生.zip

    房地产 -辉盛阁项目介绍.pptx

    房地产 -辉盛阁项目介绍.pptx

    少儿编程scratch项目源代码文件案例素材-新拉力赛.zip

    少儿编程scratch项目源代码文件案例素材-新拉力赛.zip

    scratch少儿编程逻辑思维游戏源码-混乱弹球.zip

    scratch少儿编程逻辑思维游戏源码-混乱弹球.zip

    scratch少儿编程逻辑思维游戏源码-过马路.zip

    scratch少儿编程逻辑思维游戏源码-过马路.zip

    少儿编程scratch项目源代码文件案例素材-侠盗地牢冒险.zip

    少儿编程scratch项目源代码文件案例素材-侠盗地牢冒险.zip

    少儿编程scratch项目源代码文件案例素材-我的领土.zip

    少儿编程scratch项目源代码文件案例素材-我的领土.zip

    scratch少儿编程逻辑思维游戏源码-机器人闯关.zip

    scratch少儿编程逻辑思维游戏源码-机器人闯关.zip

    少儿编程scratch项目源代码文件案例素材-天空中的英雄.zip

    少儿编程scratch项目源代码文件案例素材-天空中的英雄.zip

    少儿编程scratch项目源代码文件案例素材-突击尖峰.zip

    少儿编程scratch项目源代码文件案例素材-突击尖峰.zip

    基于微信小程序的基于微信小程序的在线青旅预订平台(后端)

    “即刻青旅”前景广阔,随着青年旅舍行业快速发展,2030年市场规模预计达650亿。创作旨在为年轻旅行者打造专属平台,填补国内专门青旅预定空白。融合微信小程序、Spring Boot等技术,实现青旅查询预定、订单管理、活动职位查看及社区分享等功能。 后端框架: 基于Java的SpringBoot快速开发框架 借助Mybatis-plus构建ORM模型进行数据库操作 第三方API:高德地图、腾讯地图

    少儿编程scratch项目源代码文件案例素材-像素猫3.zip

    少儿编程scratch项目源代码文件案例素材-像素猫3.zip

    10bit 50MHz SAR ADC设计与Cadence仿真:基于SMIC 40nm工艺库的新手指南

    内容概要:本文是一份详细的10bit 50MHz SAR ADC学习指南,旨在帮助新手掌握从基础理论到实际电路设计的全过程。文中详细介绍了Cadence仿真工具的应用以及SMIC 40nm工艺库的具体使用方法。重点讲解了栅压自举开关、CDAC(电荷再分配模数转换器)、比较器和SAR逻辑等核心模块的设计原理和技术要点。此外,还提供了测试电路的构建方法及其性能评估手段,如INL/DNL曲线绘制。最后提到了更高性能TI ADC的扩展接口,为后续深入研究打下基础。 适合人群:对模拟集成电路设计感兴趣的电子工程专业学生或刚入行的研发人员。 使用场景及目标:适用于希望深入了解SAR ADC架构、提高自身硬件设计能力的学习者;目标是在实践中掌握关键技术和优化技巧,能够独立完成类似项目的开发。 其他说明:文章不仅提供理论知识,还包括大量实用的操作提示和常见错误避免建议,有助于读者快速上手并减少试错成本。

    scratch少儿编程逻辑思维游戏源码-防空火力 3D.zip

    scratch少儿编程逻辑思维游戏源码-防空火力 3D.zip

    智慧消防安全感知平台(IOT云消防)PPT(21页).pptx

    智慧消防安全与应急管理是现代城市安全管理的重要组成部分,随着城市化进程的加速,传统消防安全管理面临着诸多挑战,如消防安全责任制度落实不到位、消防设施日常管理不足、消防警力不足等。这些问题不仅制约了消防安全管理水平的提升,也给城市的安全运行带来了潜在风险。然而,物联网和智慧城市技术的快速发展为解决这些问题提供了新的思路和方法。智慧消防作为物联网和智慧城市技术结合的创新产物,正在成为社会消防安全管理的新趋势。 智慧消防的核心在于通过技术创新实现消防安全管理的智能化和自动化。其主要应用包括物联网消防安全监管平台、城市消防远程监控系统、智慧消防平台等,这些系统利用先进的技术手段,如GPS、GSM、GIS等,实现了对消防设施的实时监控、智能巡检和精准定位。例如,单兵定位方案通过信标点定位和微惯导加蓝牙辅助定位技术,能够精确掌握消防人员的位置信息,从而提高救援效率和安全性。智慧消防不仅提升了消防设施的管理质量,还优化了社会消防安全管理资源的配置,降低了管理成本。此外,智慧消防的应用还弥补了传统消防安全管理中数据处理方式落后、值班制度执行不彻底等问题,赋予了建筑消防设施智能化、自动化的能力。 尽管智慧消防技术在社会消防安全管理工作中的应用已经展现出巨大的潜力和优势,但目前仍处于实践探索阶段。相关职能部门和研究企业需要加大研究开发力度,进一步完善系统的功能与实效性。智慧消防的发展既面临风险,也充满机遇。当前,社会消防安全管理工作中仍存在制度执行不彻底、消防设施日常维护不到位等问题,而智慧消防理念与技术的应用可以有效弥补这些弊端,提高消防安全管理的自动化与智能化水平。随着智慧城市理念的不断发展和实践,智慧消防将成为推动社会消防安全管理工作与城市化进程同步发展的关键力量。

    scratch少儿编程逻辑思维游戏源码-节奏空间.zip

    scratch少儿编程逻辑思维游戏源码-节奏空间.zip

    scratch少儿编程逻辑思维游戏源码-黑白色.zip

    scratch少儿编程逻辑思维游戏源码-黑白色.zip

Global site tag (gtag.js) - Google Analytics