首先貼出代碼:
#include <iostream>
using namespace std;
int f(int n)
{
n && (n+=f(n-1));
return n;
}
int main()
{
int n;
cin>n;
cout<<f(n)<<endl;
return 0;
}
本題常用的解題方法有:for循環、遞歸;因爲題目規定不能使用for關鍵詞,顯然for循環不能使用;而遞歸的出口處要用到if判斷句,因此也不能簡單的使用遞歸。
本文引入介紹一個知識點:邏輯運算(&&和||)的短路性質。
與運算表示:A && B; 或運算表示:A||B
短路性質是指通過對A進行判斷已經明確的知道整個表達式的結果,那麼就不會進行後面表達式的運算判斷
對於A && B:如果A爲False,則A && B已經爲False,因此就不會執行B
對於A||B:如果A爲Ture, 則A||B已經爲Ture,因此就不會在執行B
對於本題
遞歸出口的條件是if(n==0)
則結束遞歸;
因此我們可以使用與運算的短路性質:即n && (n+=f(n-1))
;當n=0時,不會再執行後面的遞歸運算