剣指offer-求1+2+3+...+n(C/C++)

1125 ワード

タイトルの説明:
1+2+3+を求めますn,乗算除算法,for,while,if,else,switch,caseなどのキーワードや条件判断文(A?B:C)は使用できないことが要求される.
問題解決の考え方:
再帰+論理ショート:
論理演算短絡の原理中断再帰演算により1+2+...n
論理ショート:
論理短絡とは、論理演算において、1つの論理式の一部の結果によって最終結果を決定することができれば、以降の論理演算を継続しないことを意味する.
1.論理和(&&)演算:オペランドにFalseが存在すると最終結果がFalseと判断される.
例1:
    int m = 22;
    int n = 33;
    (m = m > n) && (n = 666);
    cout << "m = " << m << endl;
    cout << "n = " << n << endl;
m = 0
n = 33

2.論理または(|)演算については、オペランドにTrueが存在すると最終結果がTrueと判断される.
例2:
    int m = 22;
    int n = 33;
    (m = m < n) || (n =666);
    cout << "m = " << m << endl;
    cout << "n = " << n << endl;
m = 1
n = 33

そこで本題では,演算との短絡原理に基づいて,n=0を再帰関数としての割り込み条件として求和を実現する.
問題:
class Solution {
public:
    int Sum_Solution(int n) {
        int sum;
        (sum = n) && (sum += Sum_Solution(n-1));
        return sum;
    }
};