アイデア:
この質問を行う方法はたくさんありますが、奇妙な方法の1つは、以下のコードでコメントされている種類です。これは、配列を適用することで計算できます。
知識のポイント:
3つの一般的な論理演算子、つまり「and &&」、「or ||」、「not!」があり、以下に示すように、これらには重要な短絡効果があります。
-
if(A && B)// Aが偽の場合、Bの判定は実行されず(短絡)、A && Bは直接偽と判定されます。
-
if(A || B)// Aが真の場合、Bの判定は実行されず(短絡)、A || Bは直接真であると判定されます。
次に、単純なifステートメントに置き換えることができるかどうかを考えます。
&&の短絡効果を使用して、ifステートメントの関数を置き換えますが、可能ですか?I A && Bの場合、再帰のレベルは前のAの信頼性によって制御できます。
コード:
class Solution {
public:
// int sumNums(int n) {
// bool a[n][n+1];
// return sizeof(a)>>1;
// }
//ans=1+2+3+...+n
// =(1+n)*n/2
// =sizeof(bool a[n][n+1])/2
// =sizeof(a)>>1
int sumNums(int n){
bool x = n>1 && sumNums(n-1)>0;
res+=n;
return res;
}
private:
int res = 0;
};