见代码:
#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.