题目来自剑指Offer
题目:
思路(1):可以使用递归,而且终止条件必须是隐含的。
代码:
#include <iostream>
using namespace std;
int Sum(int n)
{
int m = 0;
n && (m = Sum(n - 1) + n);
return m;
}
int main()
{
cout<<Sum(5)<<endl;
system("pause");
return 1;
}
思路(2): 静态变量 + 构造函数
代码:
#include <iostream>
using namespace std;
class Sum
{
public:
Sum()
{
m_nNum++;
m_nTotal += m_nNum;
}
static int GetSum()
{
return m_nTotal;
}
private:
static int m_nNum;
static int m_nTotal;
};
int Sum::m_nNum = 0;
int Sum::m_nTotal = 0;
void main()
{
Sum* pSum = new Sum[10];
cout<<Sum::GetSum()<<endl;
system("pause");
}
思路(3):利用虚函数
代码:
#include <iostream>
using namespace std;
class Base;
Base* pBase[2];
class Base
{
public:
virtual int Sum(int n)
{
return 0;
}
};
class Derive : public Base
{
public:
int Sum(int n)
{
return pBase[!!n]->Sum(n - 1) + n;
}
};
int main()
{
Base b;
Derive d;
pBase[0] = &b;
pBase[1] = &d;
cout<<pBase[1]->Sum(5)<<endl;
system("pause");
return 1;
}
由于pBase是基类类型的指针,它指向派生类的虚函数时,能发生多态。在n有1变化到n时,都是调用的派生类的sum函数。直到n=0时,会调用基类的函数,而返回0。这里把基类的sum函数看出类似递归的终止条件了。