題目描述:
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/qiu-12n-lcof/
示例 1:
輸入: n = 3
輸出: 6
示例 2:
輸入: n = 9
輸出: 45
解題思路:
不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
那麼求和公式用不了,遍歷求和也用不了
我們來試一下遞歸
int sumNums(int n) {
if(n==1) return n;
return n+sumNums(n-1);
}
可以看到遞歸也是要用到一句if,我們可以看看怎麼把這條if去掉
if (n==1) return n;
也就是說如果n==1,需要終止遞歸,所以我們想到了邏輯與&&連接符。
A&&B,表示如果A成立則執行B,否則如果A不成立,不用執行B
因此我們可以這樣。在n>=1的時候,執行遞歸函數。
代碼如下:
class Solution {
public:
int sumNums(int n) {
int res = n;
//當res>=1時,&&語句後面部分執行,直到res=0
//1+2+3+...+n=0+1+2+3+...+n
res&&(res+=sumNums(res-1));
return res;
}
};