算法训练 瓷砖铺放 【递归】java

本文介绍了一个使用递归方法解决的瓷砖铺放问题。对于长度为N的地板,使用长度为1和2的瓷砖进行铺放,求解不同铺放方法的数量。通过递归算法实现了对所有可能铺放方式的计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  算法训练 瓷砖铺放  
时间限制:1.0s   内存限制:512.0MB
   
锦囊1
锦囊2
锦囊3
问题描述
  有一长度为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
  编程用递归的方法求解上述问题。
输入格式
  只有一个数N,代表地板的长度
输出格式
  输出一个数,代表所有不同的瓷砖铺放方法的总数
样例输入
4
样例输出
5

思路分析:

一开始这个题我想用递归去往一个数组中添加一和二,看是否在某一个时刻,数组内的和为N。这个思路并没有做出来。

参考了网上的代码,发现自己真的很菜。。。 由于这个题不需要输出组成的序列,只输出总的数目即可,所以每次递归是的变量加一或者加二,然后根据回溯法的思想,如果加上一小于等于N则调用pudiban(val+1),如果加上二小于等于N则调用pudiban(val+2),实际上不用判断val是否会超出N,因为在调用这一层函数的时候已经判断过了。

代码:


import java.util.Scanner;

public class Main瓷砖铺法 {
	static Scanner scan = new Scanner(System.in);
	static int N;

	static int count = 0;

	public static void main(String[] args) {
		N = scan.nextInt();
		pudiban(0);
		System.out.println(count);
	}

	private static void pudiban(int val) {
		if (val == N) {
			count++;
			return;
		}
		
		if (val + 1 <= N) {
			pudiban(val + 1);
		}
		if (val + 2 <= N) {
			pudiban(val + 2);
		}
	}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值