【剑指offer刷题】10--递归与循环--矩阵覆盖

题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

这道铺地砖题与菲波那切数列题和青蛙跳台阶题是一个题,都可以用递推思想和动态规划思想解决。

  • if  target<1, return 0;
  • if  target =1,return 1; 只有一种竖直摆放方法。
  • if target =2, return 2;横竖两种摆放方法。
  • if target =n,return f(n-1)+f(n-2);  如果最后摆一竖列,总共的摆放方法有f(n-1),如果最后摆一横列,总共摆放方法有f(n-2).

代码如下:动态规划解题

int rectCover(int number)
{
	if(number<1)
		return 0;
	int *dp=new int[number+1];
	dp[0]=0;
	dp[1]=1;
	dp[2]=2;
	for(int i=3;i<=number;i++)
		dp[i]=dp[i-1]+dp[i-2];
	return dp[number];
	delete[]dp;
}

递推解题:

int rectCover(int number)
{
	int count=0;
	if(number<1)
		return 0;
	else if(number==1||number==2)
		return count=number;
	int f1=1;//f1 f2 不能写到for循环里面
	int f2=2;
	for(int i=3;i<=number;i++){
		count=f1+f2;
		f1=f2;
		f2=count;
	}
	return count;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用递归函数来计算1到n之和。递归函数是在函数内部调用自身的函数。具体实现方如下: 1. 定义一个递归函数sum,输入参数为n,输出参数为1到n之和。 2. 在函数内部,判断n是否等于1,如果是,则返回1;否则,返回n加上sum(n-1)的结果。 3. 在主函数中,输入n,调用sum函数,输出结果。 代码如下: ``` def sum(n): if n == 1: return 1 else: return n + sum(n-1) n = int(input("请输入一个正整数:")) print("1到", n, "之和为:", sum(n)) ``` 例如,输入n为5,则输出结果为:1到5之和为:15。 ### 回答2: 练习10-1 要求使用递归函数计算从1到n的和。递归函数是一种函数调用自身的技术,可以用于求解某些问题,比如计算数列的值、搜索树的结点个数等。递归函数需要定义结束条件,避免无限递归导致程序崩溃。 对于本题,可以定义递归函数sum(n)表示计算从1到n的和。当n=1时,sum(n)返回1;否则,sum(n)返回sum(n-1) + n。因此,递归函数sum(n)的计算过程如下: 1. 当n=1时,sum(1) = 1; 2. 当n>1时,sum(n) = sum(n-1) + n。 需要注意的是,递归函数的时间复杂度可能会很高,因为每次调用都会产生一些开销。如果数据规模比较大,可能会导致递归函数耗费大量时间和内存。因此,在实际应用中需要控制递归深度和优化算。 Python代码实现如下: def sum(n): if n == 1: return 1 else: return sum(n-1) + n n = int(input("请输入一个整数n,计算1到n的和:")) print("1到%d的和为%d" % (n, sum(n))) ### 回答3: 递归是一种常用的算,它可以解决很多问题,包括计算1到n之和。在计算1到n之和的问题中,我们可以使用递归函数来解决。 递归函数的基本思想是将一个大问题分解成多个小问题,然后这些小问题又可以继续分解成更小的问题,直到问题足够小可以直接计算。在计算1到n之和的问题中,我们可以使用递归函数来实现,具体步骤如下: Step1:定义递归函数,函数名为sum,传入一个参数n表示计算1到n之和。 Step2:判断n是否为1,如果是,则直接返回1,表示1到1之和为1。 Step3:如果n不为1,则调用函数sum(n-1)计算1到n-1之和,然后再加上n,即可得到1到n之和。 Step4:最后,返回求和结果即可。 以下是代码实现: ```python def sum(n): if n == 1: return 1 else: return sum(n-1) + n ``` 上述代码中,当n为1时,返回1;否则,调用sum(n-1)递归计算1到n-1之和,然后加上n返回结果。这样,通过不断递归调用,可以计算得到1到n之和。 需要注意的是,在使用递归函数时,需要注意递归深度的问题。如果递归深度太大,或者递归函数的实现不恰当,可能会导致栈溢出等问题。因此,在使用递归函数时,需要谨慎处理递归调用,避免出现问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值