Maison  >  Article  >  interface Web  >  Discussion détaillée sur la récursivité en JavaScript

Discussion détaillée sur la récursivité en JavaScript

王林
王林original
2024-08-29 14:39:32879parcourir

La

Recursion in JavaScript সম্পর্কে বিস্তারিত আলোচনা

La récursion est une technique où une fonction s'appelle elle-même. Il s’agit d’un modèle de programmation qui divise ce problème en problèmes plus petits pour résoudre un problème plus vaste. En utilisant la récursivité en JavaScript, nous pouvons faire des choses comme une boucle ou une itération, mais la récursivité peut être plus simple et plus transparente pour résoudre certains problèmes.

Comment fonctionne la récursivité ?

La récursion comporte deux parties principales :

  1. Cas de base : C'est la condition dans laquelle la fonction ne s'appellera plus. Il agit comme un point d'arrêt pour la fonction récursive. Une fonction récursive sans scénario de base peut parfois provoquer un débordement de pile (c'est-à-dire un manque de mémoire en raison d'appels répétés à la fonction).
  2. Cas récursif : C'est la partie où la fonction s'appelle, essayant de résoudre le problème en le décomposant en parties plus petites.

ex :

  1. Calcul factoriel : Factoriel est la somme des produits de tous les nombres d'un nombre à 1. Par exemple, n!=n×(n−1)×(n−2)×...×1 5! = 5 * 4 * 3 * 2 * 1 = 120.

Factorial est le produit de tous les entiers positifs de ce nombre à 1.

function factorial(n) {
    // Base case: n যদি 1 হয়, তাহলে 1 রিটার্ন করো
    if (n === 1) {
        return 1;
    }
    // Recursive case: n * factorial(n-1)
    return n * factorial(n - 1);
}

console.log(factorial(5)); // Output: 120

Ici, la fonction factorielle s'appelle jusqu'à ce que n devienne 1. Lorsque n vaut 1, la fonction ne s'appelle plus et renvoie 1. Ce résultat est progressivement renvoyé lors des appels précédents, et l'appel d'origine renvoie 120 comme résultat final.

Lorsque factorial(5) est appelé, il appellera d'abord 5 * factorial(4) et ainsi de suite jusqu'à factorial(0) où la condition du cas de base est remplie.

  1. Série de Fibonacci : La série de Fibonacci est un exemple célèbre où chaque nombre est la somme des deux nombres précédents. F(n)=F(n−1)+F(n−2)

La série de Fibonacci est une série de nombres dont les deux premiers nombres sont 0 et 1, et chaque nombre suivant est la somme des deux nombres précédents. Par exemple, 0, 1, 1, 2, 3, 5, 8,…

function fibonacci(n) {
    // Base cases: n যদি 0 বা 1 হয়, সরাসরি n রিটার্ন করো
    if (n === 0 || n === 1) {
        return n;
    }
    // Recursive case: fibonacci(n-1) + fibonacci(n-2)
    return fibonacci(n - 1) + fibonacci(n - 2);
}

console.log(fibonacci(6)); // Output: 8

Explication :

  • Cas de base : Si la valeur de n est 0, fibonacci(0) renvoie 0. Si la valeur de n est 1, fibonacci(1) renvoie 1.
  • Cas récursif : Dans tout autre cas, fibonacci(n) s'appellera avec n−1 et n−2 et renverra leur somme.

Explication de la réponse :

  1. fibonacci(0) = 0
  2. fibonacci(1) = 1
  3. fibonacci(2) = fibonacci(1) + fibonacci(0) = 1 + 0 = 1
  4. fibonacci(3) = fibonacci(2) + fibonacci(1) = 1 + 1 = 2
  5. fibonacci(4) = fibonacci(3) + fibonacci(2) = 2 + 1 = 3
  6. fibonacci(5) = fibonacci(4) + fibonacci(3) = 3 + 2 = 5
  7. fibonacci(6) = fibonacci(5) + fibonacci(4) = 5 + 3 = 8

এভাবে fibonacci(6) এর মান দাঁড়ায় 8, যা 6-তম ফিবোনাচি সংখ্যা।

  1. Tree Traversal: Tree ডেটা স্ট্রাকচারে একটি Recursive Function ব্যবহার করে DFS (Depth-First Search) করা যেতে পারে।
javascriptCopy code
function traverseTree(node) {
    console.log(node.value);
    node.children.forEach(child => traverseTree(child));
}

const tree = {
    value: 1,
    children: [
        { value: 2, children: [] },
        { value: 3, children: [
            { value: 4, children: [] },
            { value: 5, children: [] }
        ] }
    ]
};

traverseTree(tree);
// Output:
// 1
// 2
// 3
// 4
// 5

Recursion এর উপকারিতা এবং অসুবিধা

  1. উপকারিতা
  2. কোড সরলতা: Recursion জটিল সমস্যাকে সহজভাবে প্রকাশ করতে সাহায্য করে, বিশেষ করে এমন সমস্যা যেখানে সমস্যাগুলি নিজের অনুরূপ।
  3. কোড পুনরাবৃত্তি: Recursion প্রায়শই কোডের পুনরাবৃত্তি দূর করে এবং সমাধানগুলোকে ছোট এবং পরিষ্কার করে।
  4. কিছু নির্দিষ্ট সমস্যা সমাধানে কার্যকর: যেমন Tree এবং Graph ডেটা স্ট্রাকচার traversal, অথবা Mathematical series এবং sequences।
  5. অসুবিধা
  6. পারফরম্যান্স: প্রত্যেকটি recursive কল একটি নতুন execution context তৈরি করে, যা stack memory তে সংরক্ষণ করা হয়। অতিরিক্ত recursion এর ফলে stack overflow এর ঝুঁকি থাকে।
  7. জটিলতা: সাধারণ লুপের তুলনায় কিছু ক্ষেত্রে recursion বোঝা কঠিন হতে পারে, বিশেষ করে শুরুতে।
  8. অকার্যকর ফাংশন: কিছু ক্ষেত্রে, recursion অকার্যকর হতে পারে, যদি recursive ফাংশনের প্রতিটি কলের ফলে অনেক অপ্রয়োজনীয় গণনা হয়। এক্ষেত্রে Memoization বা Iterative পদ্ধতির ব্যবহার অধিক কার্যকরী।

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn