【剑指offer】求1+2+3+....+n

题目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

方法一:构造函数求阶乘
设置一个静态变量N和sum,在构造函数中进行累加运算;
然后构造一个以辅助类为类型、大小为n的数组,重复调用此构造函数n次来实现n次的累加运算

class temp
{
public:
    static void reset(){i=0;sum=0;}
    static unsigned int GetSum(){return sum;}
    temp()
    {
        ++i;
        sum += i;
    }
private:
    static int sum;
    static int i;
};

int temp::sum = 0;
int temp::i = 0;

class Solution {
public:
    int Sum_Solution(int n) {
       temp::reset();
       temp* p = new temp[n];
       delete[]p;
       p=NULL;
        
       return temp::GetSum();
    }
};

方法二:短路计算法
使用短路计算来构造递归:重点是输入0的时候输出0来结束递归
缺点:递归的层数不能太深<3000

class Solution {
public:
    int Sum_Solution(int n) {
        int ret = n;
        n && (ret += Sum_Solution(n-1)); 
        return ret;
    }
};

猜你喜欢

转载自blog.csdn.net/lvxin15353715790/article/details/87933149