1. 程式人生 > >求1+2+3+...+n

求1+2+3+...+n

直接 等等 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