JavaScript의 재귀에 대한 자세한 토론

王林
풀어 주다: 2024-08-29 14:39:32
원래의
946명이 탐색했습니다.

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

재귀는 함수가 자신을 호출하는 기술입니다. 더 큰 문제를 더 작은 문제로 나누어 해결하는 프로그래밍 패턴입니다. JavaScript에서 재귀를 사용하면 루프나 반복과 같은 작업을 수행할 수 있지만 재귀는 일부 문제를 해결하는 데 더 간단하고 투명할 수 있습니다.

재귀는 어떻게 작동하나요?

재귀에는 두 가지 주요 부분이 있습니다.

  1. 기본 사례: 함수가 더 이상 자신을 호출하지 않는 조건입니다. 재귀 함수의 중지 지점 역할을 합니다. 기본 사례가 없는 재귀 함수는 때때로 스택 오버플로를 일으킬 수 있습니다(예: 함수에 대한 반복 호출로 인해 메모리 부족).
  2. 재귀적 사례: 함수가 자신을 호출하여 문제를 더 작은 부분으로 나누어 문제를 해결하려고 하는 부분입니다.

예:

  1. 팩토리얼 계산: 팩토리얼은 숫자부터 1까지의 모든 숫자의 곱의 합입니다. 예를 들어, n!=n×(n−1)×(n−2)×...×1 5! = 5*4*3*2*1 = 120.

팩토리얼은 해당 숫자부터 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
로그인 후 복사

여기서 계승 함수는 n이 1이 될 때까지 자신을 호출합니다. n이 1이면 함수는 더 이상 자신을 호출하지 않고 1을 반환합니다. 이 결과는 이전 호출을 통해 점진적으로 반환되며, 원래 호출은 최종 결과로 120을 반환합니다.

factorial(5)이 호출되면 먼저 5 * Factorial(4) 등을 호출하여 기본 사례 조건이 충족되는 Factorial(0)까지 호출됩니다.

  1. 피보나치 수열: 피보나치 수열은 각 숫자가 이전 두 숫자의 합인 유명한 예입니다. F(n)=F(n−1)+F(n−2)

피보나치 수열은 처음 두 숫자가 0과 1이고 이후의 각 숫자는 이전 두 숫자의 합이 되는 일련의 숫자입니다. 예를 들어 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
로그인 후 복사

설명:

  • 기본 사례: n 값이 0이면 fibonacci(0)는 0을 반환합니다. n의 값이 1이면 fibonacci(1)은 1을 반환합니다.
  • 재귀 사례: 다른 경우에는 fibonacci(n)가 n−1과 n−2로 자신을 호출하고 그 합을 반환합니다.

답변 설명:

  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 পদ্ধতির ব্যবহার অধিক কার্যকরী।

위 내용은 JavaScript의 재귀에 대한 자세한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿