不使用循環對1到n累加求和的方法

前言

在開始學基礎編程的時候,我們都會學循環,那麼學循環首先都會去實現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;
}

 

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