【剑指offer】面试题64 求1+2+3+...+n

面试题–【剑指Offer】 题目解答

题目要求

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

解题分析

求1+2…+n除了用公式n*(n+1)/2,无外乎循环和递归两种思路。但是循环不能使用,所以我们想办法用递归解决,但是递归也需要一个递归结束的条件,也需要判断但是没有条件,我们只能想到用短路特性来做。
短路特性
a&&b 如果a是假的那么不会执行b

主要代码c++

// time: O(n)
class Solution {
public:
    int Sum_Solution(int n) {
       int sum = n;
       sum && (sum += Sum_Solution(n-1)); // sum=0结束递归返回 1&&sum=1+0->
       									 // 2&&sum=2+1->3&&sum=3+2+1
       return sum;
    }
};
// 还可以使用构造函数,虚函数,模板函数,函数指针

总结

在评论区看到一个解答觉得还不错,

//我们手里现在可以使用(按优先级高低)单目运算符:++和- -,双目运算符:+,-,移位运算符<<和>>,关系运算符>,<等,逻辑运算符&&,||,&,|,^,赋值=
//单目和双目的作用是一样的,移位显然没有规律性,因为一个二进制位并不能区分某个数和其他数,这也就排除了&,|,^,因为不需要做位运算了
//关系运算符要和if匹配,但这是不行的,这时看看剩下的运算符只能选&&,||了。

有关运算符的知识可以参考c++中的&与&&,|与||的关系

你可能感兴趣的:(剑指offer)