js遞歸實現方式


定義:

遞歸函數就是在函數體內調用本函數;

遞歸函數的使用要注意函數終止條件避免死循環;

遞歸實現形式:

1.聲明一個具名函數,通過函數名調用

function f(a){
    if(a<=1){
        return 1
    }else{
        return a*f(a-1)
    }
}     

但是這樣使用會因為 函數名 f 的變化而報錯,

f = null
f ()  // Uncaught TypeError: f is not a function

2. 使用arguments.callee代替函數名

在嚴格模式下不支持使用arguments.callee

3.使用函數表達式

 

var fun = (function f(a){
    if(a<=1){
        return 1
    }else{
        return a*f(a-1)
    }
})

// 或:

var f = function (a){
    if(a<=1){
        return 1
    }else{
        return a*f(a-1)
    }
}

var fun = f;

 遞歸返回值

1.遞歸函數相當於一種循環調用,需要避免死循環,給定一個條件停止調用

2.遞歸函數的返回值要返回整個函數

// 返回公約數的數組集合
let fun = (function f(a,n = 1,b=[]){
  if(a%n === 0) {
     b.push(n)            
    }
   n ++;
   if(n>a){
   return b
 }
 return f(a,n,b) // *** 要返回整個函數,不能只是return b
})

調用函數

fun(4)
[1, 2, 4]

在 *** 處要返回整個函數,

這是因為當執行條件 n>a 不成立時是沒有返回值的,例如,第一次執行時 n=1,a=4,1>4 為false因而沒有返回值,接着之后的值也都沒有返回

// 可以參考這種形式,有return fun
fun (){
return fun(){
 return fun(){
   return 4
 }
}
}

// 可以參考這種形式,沒有return fun
fun (){
fun(){
 fun(){
   return 4
 }
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM