您的位置:首页 > 其它

一个简单的递归问题

2013-05-18 13:22 295 查看
见代码:

#include <iostream>
using namespace std;
class Sample
{
public:
Sample(int x):m_x(x){}
int get()const;
private:
int m_x;
};
int Sample::get()const
{
return m_x;
}
int fun(Sample s)
{
if(s.get() <2) return 1;
return s.get() * fun(Sample(s.get()-1));
}
int main()
{
int sum=0;
for(int i=0; i!=4; ++i)
{
sum+=fun(Sample(i));
}
cout<<sum<<endl;
return 0;
}


请问sum的值。

 

fun实质上是个递归函数,当Sample对象s的m_x值小于2,导致递归结束。

一般情况下,fun(s)的值是 s.m_x * fun(Sample(s.m_x  -1 ) )的值

特殊情况下,fun(s)的值是 1,即s.m_x的值小于2时。

 

可以推导出一个递归的数学式子:

当x<2时,fun(x)=1;

当x>=2时,fun(x)=x*fun(x -1);即 fun(x)=x! ;

 

很容易推出fun(0)=1,fun(1)=1;fun(2)=2;fun(3)=6;

所以可得到sum的值10.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: