问题描述
有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,
数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?
例如,长度为4的地面一共有如下5种铺法:
4=1+1+1+1
4=2+1+1
4=1+2+1
4=1+1+2
4=2+2
编程用递归的方法求解上述问题。
代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class Main
{
/**有个规律那就是:当用户输入1是的时候那么
* 1=1 一种情况
* 输入2的时候
* 2=1+1 2=2 两种情况
* 输入3的时候
* 3=1+1+1 3=1+2 3=2+1 三种情况
* 输入4的时候
* 4=1+1+1+1 4=1+1+2 4=1+2+1 4=2+1+1 4=2+2 五种情况
* ...........
* 可以发现一个规律,那就是从第三项开始前面两项之和等于后面两项,那么我们可以用递归来做
* @param args
*/
public static int f(int n){
if(n==1){ //当等于1的时候就直接返回1
return 1;
}
if(n==2){ //当等于2的时候直接返回2
return 2;
}
return f(n-1)+f(n-2); //前面两项等于后面两项
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println(f(a));
}
}
结果:
输入:4
输出:5