本题源自剑指offer
--------------------------------------------
思路:1 这种题一般用循环和递归来求解,现在不让用for,if 就是禁止使用循环和递归。因此考的是发散思维。
2 利用构造函数求解
class Solution {
public:
Solution(){
++N;
sum+=N;
}
static void reset(){
N=0;
sum=0;
}
static int getSum(){
return sum;
}
private:
static int N;
static int sum;
};
int Solution::N=0;
int Solution::sum=0;
int Sum_Solution(int n) {
Solution::reset();
Solution *a=new Solution[n];
delete[] a;
a=NULL;
return Solution::getSum();
}
2 利用虚函数,模拟递归求解
class A;
A* Array[2];
class A{
public:
virtual int Sum(int n){
return 0;
}
}
class B : public A{
virtual int Sum(int n){
return Array[!!n]->sum(n-1)+n;
}
}
int Sum_Solution(int n){
A a;
B b;
Array[0]=&a;
Array[1]=&b;
int value=Array[1]->Sum(n);
return value;
}
3 利用函数指针
typedef unsigned int (*fun)(unsigned int);
unsigned int Solution3_Teminator(unsigned int n){
return 0;
}
unsigned int Sum_solution(unsigned int n){
static fun f[2]={Solution3_Teminator,Sum_solution};
return n+f[!!n](n-1);
}
4 短路递归
int Sum_Solution(int n) {
int sum=n;
sum && (sum+=Sum_Solution(n-1));
return sum;
}