力扣:求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)

首先貼出代碼:

#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時,不會再執行後面的遞歸運算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章