思路:
走上第20个台阶有2种情况,一种是站在第19个台阶上 在走一步就到达20
还有一种就是站在第18个台阶上再走2步就到达20台阶
……
从此,n阶台阶的走法是n-1个台阶的走法加上n-2个台阶的走法
package com.zyh.test;
public class Test {
static int num=0;
/**
* @param 夜晚聊天小程序
*/
public static void main(String[] args) {
//System.out.println(Taijie(20));
System.out.println(Taijie2(0));
}
/**
* 递归求解台阶问题 第一种做法
* 一共20个台阶,每次只能走一步或者两步,问一共有多少种走法
* @param n为台阶数
* @return 一共多少种走法
*/
public static int Taijie(int n){
if(n==1)
num=1;
if(n==2)
num=2;
if(n>2)
num=Taijie(n-1)+Taijie(n-2);
return num;
}
/**
* 第二种做法
* 全排列做法,循环的测试每种做法
*/
public static int Taijie2(int n){
if(n==20)
return 1;
if(n>20)
return 0;
return Taijie2(n+1)+Taijie2(n+2);
}
}
如果不限制走的种类,要求计算需要走多少1步的和2步的,就转换成x+2y=20的解