js遞迴原理之return

2021-09-14 03:54:32 字數 2127 閱讀 9069

先看以下**:

var a = 1;

function multiply(n)

a = n * multiply(n - 1);

console.log('n:' + n);

console.log('a:' + a);

}console.log(multiply(5))

開啟chrome瀏覽器斷點除錯,**js執行過程

//**執行過程

a=n*multiply(n-1)//n=5 a=1

a=n*multiply(n-1)//n=4 a=1

a=n*multiply(n-1)//n=3 a=1

a=n*multiply(n-1)//n=2 a=1

a=n*multiply(n-1)//n=1 a=1 return 1

//此時函式開始向上回溯

a=n*multiply(n-1)//n=2 a=2*1=2

console.log('n:'+n)//n:2

console.log('a:'+a)//a:2 return undefined

a=n*multiply(n-1)//n=3 a=3*undefined=nan

console.log('n:'+n)//n:3

console.log('a:'+a)//a:nan return undefined

a=n*multiply(n-1)//n=4 a=4*undefined=nan

console.log('n:'+n)//n:4

console.log('a:'+a)//a:nan return undefined

a=n*multiply(n-1)//n=5 a=5*undefined=nan

console.log('n:'+n)//n:5

console.log('a:'+a)//a:nan return undefined

將**修改一下:

var a = 1;

function multiply(n)

a = n * multiply(n - 1);

console.log('n:' + n);

console.log('a:' + a);

return a;//每次將a返回

}console.log(multiply(5))

//**執行過程

a=n*multiply(n-1)//n=5 a=1

a=n*multiply(n-1)//n=4 a=1

a=n*multiply(n-1)//n=3 a=1

a=n*multiply(n-1)//n=2 a=1

a=n*multiply(n-1)//n=1 a=1 return 1

//此時函式開始向上回溯

a=n*multiply(n-1)//n=2 a=2*1=2

console.log('n:'+n)//n:2

console.log('a:'+a)//a:2 return 2

a=n*multiply(n-1)//n=3 a=3*2=6

console.log('n:'+n)//n:3

console.log('a:'+a)//a:6 return 6

a=n*multiply(n-1)//n=4 a=4*6=24

console.log('n:'+n)//n:4

console.log('a:'+a)//a:24 return 24

a=n*multiply(n-1)//n=5 a=5*24=120

console.log('n:'+n)//n:5

console.log('a:'+a)//a:120 return 120

總結:

所以在遞迴過程中,如果遞迴依賴上一次遞迴的結果,需要將結果return。

如果不需要上一次的結果,就不需要return。

所以示例**的正確寫法是:

function multiply(n) 

return n * multiply(n - 1);

}

js遞迴原理

本部落格主要講述關於js的函式遞迴,主要從 變數 函式 和 函式 變數 兩個方面說明解釋。相對簡單,直接上 function fun fun 用遞迴 來求 5 的階乘 n n n 1 定義乙個函式,用於求 n 的階乘 function func n func n 1 因為傳遞的引數是 n 1,那麼就...

js遞迴呼叫注意return返回值

let depth 0function fc num const res fc 5 console.log res 2 我們可以使用迭代迴圈,去改寫遞迴,每次都去計算值,而不是將函式儲存在記憶體中等待呼叫,從而避免堆疊溢位。function fc num console.log res fc 6 f...

遞迴return的問題

遞迴的四條基本法則 引自 資料結構與演算法分析 c語言描述 mark allen weiss 著 1.基準情形。2.不斷推進。3.設計法則。4.合成效益法則。這裡說下return的作用域 return 對當前函式來說是結束了,對呼叫它的父函式來說你這個函式執行完成了,父函式就會接著執行下一語句。沒想...