求1+2+3+...+n
阿新 • • 發佈:2018-06-03
直接 等等 lin 遞歸 bool word esc scribe bject
題目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 首先看到這個題,不讓用for,while等等。要實現循環,那麽就是遞歸了。1
.需利用邏輯與的短路特性實現遞歸終止。
2
.當n==
0
時,(n>
0
)&&((sum+=Sum_Solution(n-
1
))>
0
)只執行前面的判斷,為
false
,然後直接返回,ans為
0
;
3
.當n>
0
時,執行sum+=Sum_Solution(n-
1
),實現遞歸計算Sum_Solution(n)。
代碼:
int Sum_Solution(int n) {
int ans = n;
ans && (ans +=Sum_Solution(n-1));
return ans;
}
ans && (ans +=Sum_Solution(n-1));//這個語句前一半是用來實現遞歸終止的,後一半是賦值語句。
還有一個我覺得超厲害的代碼,我完全沒想到,但是數組的定義用變量,有的編譯器應該過不了,但這想法感覺很獨特
int Sum_Solution(int n) { bool a[n][n+1]; return sizeof(a)>>1; }
用sizeof直接實現了乘法。
求1+2+3+...+n