浅析·递推与递归

浅析·递推

如果我们要买一根雪糕刺客,我们需要:先找到超市——再打开冰柜——拿取自己心仪的“便宜”雪糕——结账——付亿点点钱——吃一口。

像我这样把买雪糕刺客的重要任务分解成小规模的子任务,再把子任务分解成更小的子任务,直到买到雪糕,递推与递归也用到了动态规划,以及lyx写的分治思想,这样可以让你更好的买到雪糕刺客。

递推思想

我们看到洛谷P1255数楼梯,分析一下这道题:如果我们想要走到第1000个台阶时,,就必须要先走到第998或第999个台阶,然后一步在跨到第1000个台阶,所以我们只要把从头到第998级的走法与从头到第999级的走法数量相加,就能做出这道题,把这种思想想成台阶思想(自己想的)

//假设从头走到第i个台阶的走法数量是f[i],再根据台阶思想就能得出
f[1000]=f[999]+f[998]//一直到最后就是
f[i] = f[i-2]+f[i-1]//跟斐波那契数列较为相像,但并不是
//如果我们知道了f[1]与f[2]的值,就可以推断出
f[3]=f[1]+f[2]//一直推断出
f[1000] = f[998]+f[999]
//如果只有一个台阶,一步就能上去就1种做法,两个的话可以走两次一步或者一次
//两步
//所以
f[1]=f[2]=1

所以核心代码就是:

int main(){
	cin >> n;
	a f[5010];
	f[1] = a(1);
	f[2] = a(2);
	for(int i = 3; i <= n; i++)
		f[i] = f[i - 2] + f[i - 1];
	f[n].print()
	return 0;
}

浅析·递归

就相当于:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢…

像这一种,在函数运行时调用自己,来解决问题的思想,叫做递归思想

递归思想

我们看到洛谷P1028[NOIP2001 普及组] 数的计算,依旧是来分析一下:

//假设我们输入数字6,那么就只有数列
[6] [61] [62] [621] [63] [631]
//对于整数n,我们就能求出
n/2+1
//再假如数列中最开始只有一个元素8,在末尾加上一个全新的元素,
//这个数列就变成了
[84] [83] [82] [81] [8]
//就是一共有5种情况
//我们只要这样,分别计算
[4] [3] [2] [1]
//最后就把他们累加出来就得嘞

我们可以写一个函数:

long long sol(long long x) { //定义sol函数
	if(x == 1) //小小叛断
		retuen 1; //返回值1
	int ans = 1; //定义一个ans变量
	for(int i = 1; i <= x / 2; i++) //循环
		ans += sol(i);
	return ans; //返回值ans
}

好像没写过完整代码(^-^)V

#include<bits/stdc++.h> //万能头
using namespace std; //命名空间
long long n, f[1010]; //定义n与数组f,比较喜欢用long long
int sol(int x) { //定义sol函数
	long long ans = 1;//定义ans变量
	if(f[x] != -1) //基础判断叛断f[x]是不是不等于-1
		return f[x];//条件为真,返回值f[x]
	for(long long i = 1; i <= x / 2; i++)//for循环
		ans += sol(i);
	return f[x] = ans; //返回值f[x] = ans
} 
int main(){
	cin >> n;//输入n
	memset(f, -1, sizeof(f));//初始化
	f[1] = 1;//把f[2]设为1
	cout << sol(n) << endl;//输出
	return 0;//华丽结尾
}

讲到这里,拜拜┏(^0^)┛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值