递归的情况,我们需要做的就是在两个函数里二选一。从二选一我们很自然的想到布尔变量,比如true时调用第一个函数,false时调用第二个函数。那现在的问题是如和把数值变量n转换成布尔值,如果对n连续做两次反运算,即!!n,那么非零的n转换为true,0转换为false。
3-代码 :
3.1-思路1代码 :
class C1
{
private:
static int n;
static int sum;
public:
//构造函数
C1()
{
++n;
sum += n;
}
//重置函数
static void Reset()
{
n = 0;
sum = 0;
}
//获取和
static int GetSum()
{
return sum;
}
};
int C1::n = 0;
int C1::sum = 0;
int SolutionSum1(int n)
{
C1::Reset();
C1 *a = new C1[n];
delete[] a;
a = 0;
return C1::GetSum();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
3.2-思路2代码 :
//A->Sum函数的作用:当n=0时,停止递归
class A
{
public:
virtual int Sum(int n)
{
return 0;
}
};
//B->Sum函数的作用:当n!=0时,继续递归
class B : public A
{
public:
virtual int Sum(int n)
{
return Arr[!!n]->Sum(n - 1) + n;
}
};
//用虚函数来实现函数的选择(虚函数可以实现多态性)
//当n不为零时,执行函数B::Sum;当n为0时,执行A::Sum
int SolutionSum2(int n)
{
A a;
B b;
//定义一个A类的数组
A *Arr[2];
Arr[0] = &a;
Arr[1] = &b;
//假设n不为0
int res = Arr[1]->Sum(n);
return res;
}
---------------------
作者:252619
来源:CSDN
原文:https://blog.csdn.net/xidianbaby/article/details/84930059
版权声明:本文为博主原创文章,转载请附上博文链接!
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



