發現現在台面上的題解沒有一個正經的, ZeroJudge 應該要改成按照評分而非時間來排解題報告 XD
大家安安 o'_'o
這題應該都會想到 Sigma,但是題目有不少限制。
讓我們挑戰看看吧
提示裡面說到遞迴,可是如何不用 if 終止遞迴?
C 的邏輯運算子有些特性,像是 || 在實作時只要第一個條件成立編譯器就不會理會第二個條件;同樣地,&& 在第一個條件即為偽時則直接跳過。運用此特性在大筆測資時可有效減少條件判斷之次數。
另外一個有趣的特性是,對於 C 運算式可以當作陳述式,賦值的陳述式可以當作運算元。也就是說,常常有人寫出這種討人厭的寫法:
if (-1 != f = fopen(...))
{
...
}
利用此特性,我們同樣可以寫出這個函式 f:
int f(int x)
{
printf("%d\n", x);
x && f(x - 1);
return x;
}
你大概可以想像,這個函式會遞迴 x + 1 次。
現在,你需要把他改寫為遞迴求和。
發現現在台面上的題解沒有一個正經的, ZeroJudge 應該要改成按照評分而非時間來排解題報告 XD
大家安安 o'_'o
這題應該都會想到 Sigma,但是題目有不少限制。
讓我們挑戰看看吧
提示裡面說到遞迴,可是如何不用 if 終止遞迴?
C 的邏輯運算子有些特性,像是 || 在實作時只要第一個條件成立編譯器就不會理會第二個條件;同樣地,&& 在第一個條件即為偽時則直接跳過。運用此特性在大筆測資時可有效減少條件判斷之次數。
另外一個有趣的特性是,對於 C 運算式可以當作陳述式,賦值的陳述式可以當作運算元。也就是說,常常有人寫出這種討人厭的寫法:
if (-1 != f = fopen(...))
{
...
}
利用此特性,我們同樣可以寫出這個函式 f:
int f(int x)
{
printf("%d\n", x);
x && f(x - 1);
return x;
}
你大概可以想像,這個函式會遞迴 x + 1 次。
現在,你需要把他改寫為遞迴求和。
嗯。可以思考增加點讚功能。