对于C++初学者(我)来说,函数递归的部分只需要会写数字的阶乘就可以了。
了解函数递归的思想应该是最重要的。
姑且写了一个猴子吃桃问题。
猴子第1天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第2天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。输入1~10中的任意一个数,查询该天猴子剩下多少桃子?要求用递归函数实现问题求解。
正序还是倒序第几天根本无所谓,做一个简单运算全部都看成倒过来的就可以了。
关键在思想。
你需要将函数纳入每次实现的步骤中,并将最开始的值操作保留
如下:
#include <iostream>
using namespace std;
int fac(int x)
{
int temp=0;
for(int i=2;i<=x;i++)
{
temp=2*(fac(i-1)+1);
}
if(x==1) return 1;
return temp;
}
int main()
{
int n;
cin>>n;
int x=10-n+1;
int a=fac(x);
cout<<a;
}
最后一次的运算是2*(1+1)
之后的运算都是基于前一次这样操作的结果,把1替换成函数,最后一次的值单独返回,理清思路就比较轻松了(也可以去看看我写的数字逆序中的利用函数递归思想写的代码,尝试理解一下思想)