Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Erläuterung der rekursiven Javascript-Funktionen (mit Beispielen)

不言
Freigeben: 2018-10-23 15:59:59
nach vorne
7100 Leute haben es durchsucht

Dieser Artikel enthält eine detaillierte Erklärung der rekursiven Funktionen von JavaScript (mit Beispielen). Freunde in Not können darauf verweisen.

Ich habe rekursive Funktionen schon oft gesehen, aber ich hatte nie das Gefühl, dass ich sie vollständig verstanden habe. Dieses Mal hatte ich Zeit, die <> zu lesen, und beruhigte mich, sie noch einmal zu lesen . Rekursion, ich habe das Gefühl, ich habe es endlich ein wenig verstanden, fasse meine dumme Art zusammen, diese Art von Problem zu lösen, haha

Die rekursive Funktion besteht darin, das zu übergeben Name einer Funktion Nennen Sie Ihre eigene Funktion
Dies ist die Definition im Buch, aber sie ist tatsächlich inkonsistent. Es wird genauso verwirrend sein, wenn Sie auf ähnliche Interviewfragen stoßen

Lass uns zuerst Schauen Sie sich einen Fall im Buch an.

function factorial(num){ 
    if (num <= 1){ 
         return 1; 
    } else { 
        return num * factorial(num-1); 
    } 
}
Nach dem Login kopieren

Eine klassische faktorielle Rekursion. Dieser Code ist leicht zu verstehen, aber wenn Sie aufgefordert werden, die Rekursion zum Schreiben einer Fakultät zu verwenden, werden sich einige Leute langweilen.
Meine Güte Idee ist

Schritt 1: Den Ausgangspunkt finden

    factorial(1) =  1  = 1   //要思考这个递归的起点在哪里,就像阶乘就是1  而累加的话就是0
    factorial(2) =  2 * 1  =2  //接着我们试着多写等式然后找出规律
    factorial(3) =  3 *  2  *  1 = 6
    factorial(4) =  4 *  3  *  2  * 1  = 24
Nach dem Login kopieren

Schritt 2: Funktion zum Ersetzen von Zahlen

    // 我们试着将等式右边的实际变量用左边的函数替换
    factorial(1) =  1  = 1
    factorial(2) =  2 * factorial(1) = 2    
    factorial(3) =  3 * factorial(2) = 6    
    factorial(4) =  4 * factorial(3) = 24
Nach dem Login kopieren

Schritt 3: Muster finden

    factorial(4) =  4 * factorial(3) = 24 
    //以的阶乘为例  4! =  4 *  3!(3的阶乘)
    //而3!其实就是这个函数本身,ta会继续调用递归函数直至调用到factorial(1)
    
    //把4替换成参数
    factorial(n) =  n * factorial(n - 1)
Nach dem Login kopieren

Schritt 4 : In eine rekursive Funktion konvertieren

    再看下步骤2
        情况1:起点
        factorial(1) =  1  = 1
        情况2:费起点
        factorial(2) =  2 * factorial(1) = 2    
        factorial(3) =  3 * factorial(2) = 6    
        factorial(4) =  4 * factorial(3) = 24  
     
    所以方法内应该需要两种情况
        function  factorial(n){
            if(n>=1){
                 return  n *  factorial(n - 1)
            }else{
                return 1   //起点其实就是递归方法返回的起始值
            }
        }
Nach dem Login kopieren

Wenn es immer noch keine Möglichkeit gibt, diese rekursive Funktion zu verstehen, können wir alle Rekursionen in anonyme Funktionen aufteilen

    //我们计算一个4阶乘
    fun(4){
        return  4 *  fun(3)
    }
    
    fun(3){
        return 3 *  fun(2)
    }

    fun(2){
        return  2 *  fun(1)
    }
    
    fun(1){
        return 1 
    }

   你运行fun(4)的时候,一层一层想内访问,访问到fun(1)时候,再讲所有的已知变量计算出结果
    fun(4)=>fun(3)=>fun(2)=>fun(1)=>fun(2)=>fun(3)=>fun(4)

    return  4 *  3 *  2 * 1
Nach dem Login kopieren

Dann benutze meine dumme Methode, um andere Beispiele auszuprobieren, haha , ich sollte in der Lage sein, die meisten Interviewfragen zu beantworten

Chestnuss 1:

    //计算1-10之间的和

    //fun(0) = 0;            //0
    //fun(1) = 1;            //1
    //fun(2) = 2 +  fun(1)   //3
    //fun(3) = 3 +  fun(2)   //6
    //fun(4) = 4 +  fun(3)   //10

    
    function fun(num){
        if(num > 1){
            return num + fun(num-1)
        }else{
            return 1
        }
    
    }
    
    
    fun(10)   //55
Nach dem Login kopieren

Lizi 2:

    
    //一共有n格,每步可以走1格或者2格,问一共有多少走法。 
    // fn(1) =  1    //一个格子的时候只能走一步,所有只有一种走法
    // fn(2) =  2    //两个格子的时候,可以一次走1个两步,也可以走2个一步,所以是2种走法,后面就要拿个草稿纸算下了
    // fn(3) =  3    // fn(2) + fn(1)
    // fn(4) =  5    // fn(3) + fn(2)
    // fn(5) =  8    // fn(4) + fn(3)   //规律 :fn(n) =  fn(n-1) +  fn(n-2)  个人认为所有能做递归函数的,都是有规律可寻的.即便不是很理解其中的原理,但是通过代入数字,也是可以很快发现的这些相同之处,概括成函数的.
    
    function  fun(num){
        if(num == 1){
            return 1
        }else if(num == 2){
            return 2
        }else{
            return  fun(num-1) +  fun(num-2)
        }
    }
    
    fun(5)  // 8
Nach dem Login kopieren

Das ist alles, was ich über rekursive Funktionen weiß, falls Sie welche haben rekursive Interviewfragen, Sie können eine Nachricht hinterlassen und sie gemeinsam besprechen, haha

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der rekursiven Javascript-Funktionen (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!