前言
在開始學基礎編程的時候,我們都會學循環,那麼學循環首先都會去實現1加到n,看到這種題目都會想到用for循環,或者用while循環來進行實現,但是在很多的面試或者筆試的過程中面試官會讓你不用循環去實現1加到n的求和,那麼不用循環要怎麼進行實現呢?
正文
首先我們來看下用循環實現的方式
int sum_solution(n){
int sum=0;
//用for循環實現
for(int i=1;i<=n;i++){
sum+=i;
}
//用while循環實現
while(n){
sum+=n;
n--;
}
return sum;
}
以上程序是用for循環來進行實現的,那麼不用循環怎麼實現?可以用遞歸,通過不斷調用函數本身,隱式的使用棧來進行實現1到n的累加,具體實現如下
int sum_solution(int n){
if(n==1)
return 1;
return sum_solution(n-1)+n;
}
那麼假如if也不能使用呢?該如何實現?可以用三目運算符,實現如下
int sum_solution(int n){
return n==1?1:sum_solution(n-1)+n;
}
如果三目運算符也不能使用呢?這些條件判斷語句,關鍵字之類都不能用呢?該如何實現?
可以思考下,用遞歸實現,主要是怎麼不用條件判斷語句去實現遞歸結束條件?可以用&&來實現,程序在執行的時候遇到&&一般都會首先去判斷&&前面的部分,如果前面的部分是false,那麼後面的部分也就不會執行了,直接返回false,所以可以利用這一點,當n遞歸到0的時候就是false,這個時候&&後面的部分就不會執行了,直接返回結果,這個時候遞歸就結束了,開始回溯累加了,最後就能得到1到n的累加和了,具體實現如下
int sum_solution(int n){
int sum=n;
sum&&(sum+=sum_solution(n-1));
return sum;
}