递归思想:(倒序输出,问年龄)

题目简单,我们着重讨论递归思想
1.【问题描述】
给定一个正整数n,要你用递归算法倒序输出它

比如n = 12345

好,那么我们来用递归思考。倒序输出的结果是54321, 也就是说,如果我们能倒序输出1234,那么在这个基础上我们在前面输出一个5不就可以了吗?这就把问题化小了。
所以,我才设f(n)表示倒序输出n
f(n) = 输出n % 10 + f(n / 10)就可以了

代码:

/*
递归:倒序输出一个整数 
*/
#include<iostream>
using namespace std;

void f(int n)
{
	if(n == 0)
		return ;
	cout << n % 10;
	f(n / 10);
}
 
int main()
{
	int n;
	cin >> n;
	f(n);
	return 0;
}

时刻记得,递归就是一步一步把待解的大问题化为小问题,大小问题存在某种关系,当问题规模足够小的时候,我们就可以直接解决,这就是递归的核心思想。因此,必须要大问题与小问题性质一样!


【问题描述】
有5个小孩,问第一个小孩多大,他说比第二大2岁,
第二个比三个大2岁 第三个比四个大2岁 第四个比五个大2岁 第五个10岁,求第1个小孩年纪?

这一题我们也从递归思想来。一开始,我去问第一个小孩的年龄,它说比第二个大2岁,那也就是说,我们只要知道第二个小孩的年龄问题就解了。
f(n) = f(n + 1) + 2 其中边界条件就是n = 5的时候直接返回10
每一次要将大的问题往边界方向缩小,形成性质一样的小问题

/*
3.  有5个小孩,问第一个小孩多大,他说比第二大2岁, 
第二个比三个大2岁 第三个比四个大2岁 第四个比五个大2岁  第五个10岁,求第个小孩年纪?
*/
#include<iostream>
using namespace std;

int f(int n)			//表示第n个小孩 
{
	//边界 
	if(n == 5)
	{
		cout << "第 5 个小孩有" << 10 << "岁" << endl;
		return 10;
	}
	int age = f(n + 1) + 2;
	cout << "第 " << n << " 个小孩有" << age << "岁" << endl;
	return age;
}

int main()
{
	int x = f(1);
	return 0;
}

最近要多刷递归题,训练递归思考问题的方式,对做dp题也有好处!

猜你喜欢

转载自blog.csdn.net/weixin_40163242/article/details/88044767