各位知道等差級數公式嗎?跟那個沒有任何關係,我就是想問一下。
誠然,我們不能使用乘除法,也不能使用<<與>>,我們很難利用這個公式
但是數字不大,所以我們可以老老實實的加
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了!