2015-11-04 122 views
1

我需要將返回值存儲在變量中。如何在變量中保存遞歸函數的返回值

我想知道如何解決這段代碼。我知道如果b的值是3,我會得到值= 2,但是如果函數做了多於一次的迭代,我就會得到不確定的結果。我讀過,我應該使用回調或什麼,但我不知道如何,也解釋了爲什麼我的代碼不起作用,我應該如何解決它。 (當然這個代碼是爲了演示的目的,好像我會告訴你原來它可能會讓人困惑。)非常感謝!

var b = 70; 

function myfunction() { 
    b--; 
    if (b < 3) { 
     return b; 
    } else { 
     myfunction(); 
    } 
} 
value = myfunction(); 
console.log(value); 
+4

使用'返回myfunction的();''中else' – Tushar

+0

非常感謝!你能解釋一下這是如何工作的嗎? – Wasea

+1

[瞭解遞歸函數的工作原理](http://stackoverflow.com/questions/25676961/understanding-how-recursive-functions-work) – Tushar

回答

0

您的代碼:myFunction()將在第一次調用返回void/undefined,它不是一個遞歸方法。

以下示例是遞歸方法。遞歸函數通常會收到一個要處理的參數,並返回一個最終值,該值將起泡(返回)到第一個調用方。

function myfunction(b){ 
    b--; 
    if(b<3) return b; 
    else return myFunction(b); 
} 

當你調用一個遞歸函數時,你應該準備一個轉義測試。否則,你可能會以無限循環結束。無限遞歸的

function badFunction(){ 
return badFunction(); 
} 
// DON'T call badFunction() 

遞歸例

var b = 70; 
 
var safety = 1000; 
 

 
function myfunction(local_b) { 
 
    if(safety<0) return; 
 
    safety--; 
 

 
    // main task 
 
    local_b--; 
 
    
 
    if (local_b < 3) { 
 
    return local_b; 
 
    } 
 

 
    return myfunction(local_b); 
 

 
} 
 
var value = myfunction(b); // when b = 70, value = 2 
 
console.log(value); 
 
document.getElementById('value').innerHTML = value;
<span id="value">_</span>

0

var b = 70; 
 

 
function myfunction() { 
 
    b--; 
 
    if (b < 3) { 
 
     return b; 
 
    } else { 
 
     myfunction(); 
 
     return b; 
 
    } 
 
} 
 
value = myfunction(); 
 
console.log(value);