求 1 2 n 有趣的短路原則

2021-10-03 22:48:20 字數 1110 閱讀 2583

1+2+...+n,要求

不能使用

乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)

c++函式形式為int sumnums(int n)

本來是乙個很簡單的問題,但是加上不准使用這些語句的限制,瞬間就變得有些艱難。

我們來思考,不能用迴圈,也不能用乘除,怎麼完成累加得過程呢?這個很簡單,一般都能想到,那就是使用遞迴,好像除了遞迴,也沒有能進行累加得操作了。

有了遞迴的思路後,我們應該繼續思考下一步,怎樣返回?遞迴最重要的就是返回條件,而返回條件肯定需要判斷,需要判斷就需要用到if,else,switch等選擇語句,現在不能使用這些語句,是不是這個題就無解了啊???

我們再來回想一下我們的思路,看看能不能從中找到一些可以突破的點,第乙個,使用遞迴,毋庸置疑,不用遞迴咋整,再麼既有其它的辦法了,第二個,使用遞迴是不是得確定返回條件,確實是,不確定返回條件,遞迴就會無限的執行下去,最終會導致棧溢位,第三個,確定返回條件是不是需要能夠選擇的語句,返回條件在這裡就是n大於0,肯定需要能夠選擇的語句才能控制遞迴返回,這個也是毋庸質疑的,第四個,能夠選擇的語句是不是就只有 if else switch case a?b:c呢?一般常用的就這些,但是我們不能確定就只有這些,我們可以從一些基本的語句去找,看能不能找到具有選擇功能的語句。

&&運算子具有如下的特性:對於a&&b

如果a為true,返回b的布林值。

如果a為false,直接返回false,不去執行b。

我們稱這一特性為短路原則

了解短路原則之後,我們就能從短路原則中找到選擇的功能了,在**呢?我們注意到,當a為假時,就不會去執行b了,如果我們把返回條件的相反值作為a,遞迴語句作為b,是不是就可以控制遞迴何時返回了呢 ?對的,就是這樣,問題完美解決。

int sumnums(int n)
atfwus  --writing  by 2020--03--16

求1 2 n 很多限制條件

題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字以及條件判斷語句 a?b c 分析 這道題沒有多少實際意義,因為在軟體開發中不會有這麼 的限制。但這道題卻能有效地考查發散思維能力,而發散思維能力能反映出對程式設計相關技術理解的深刻程度。通常求...

微軟100題 求1 2 n

題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字以及條件判斷語句 a?b c package test 題目 求1 2 n,要求不能使用乘除法,for,while,if,else,switch,case,條件判斷語句 a?b c author...

有限制條件的求1 2 n

求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字 及條件判斷語句 a?b c 解法1 利用建構函式求解。關鍵是static的應用。class temp 可以用加法。static void reset static unsigned int gets...