题目简单,我们着重讨论递归思想
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题也有好处!