#55450: 有良心的解題報告


Ixcy (Ixcy)


各位知道等差級數公式嗎?跟那個沒有任何關係,我就是想問一下。

誠然,我們不能使用乘除法,也不能使用<<與>>,我們很難利用這個公式

但是數字不大,所以我們可以老老實實的加

int ans = 0;

for(int i = 1; i <= n; i++){

    ans += i;

}

實際上,不太老實,我們還是使用for了

很高興的,我們剛好知道遞迴與迭代可以相互實現(你不知道的話現在知道了)

int f(int n, int ret){

    if(n == 0){

        return ret;

    }

    return f(n - 1, ret + n);

}

然而,現在又出現了if

(這是很合理的,for(; 判斷式; )、while(判斷式),當我們把它移出來的時候,就很合理的想用if終止)

所以,我們希望有一種很微妙的方式,當n==0時就不要跑到後面的部分了

不妨回顧C語言的特性

如果a && b的a為false,則不確認b部分回傳false

(如果a || b的a為true,則不確認b部分回傳true)

所以我們可以寫下

(n != 0) && (ret = n + f(n - 1, ret));

這個非常抽象的東西

最後return ret;,就可以從n = 0開始回傳ret了!