Recursion is a technique where a function calls itself. It is a programming pattern that solves a larger problem by breaking it down into smaller problems. Using recursion in JavaScript we can do things like loop or iteration, but recursion can be simpler and more transparent to solve some problems.
How does recursion work?
Recursion has two main parts:
-
Base Case: This is the condition where the function will no longer call itself. It acts as a stopping point for the recursive function. A recursive function without a base case can sometimes cause a stack overflow (ie, running out of memory due to repeated calls to the function).
-
Recursive Case: This is the part where the function calls itself, trying to solve the problem by breaking it down into smaller parts.
eg:
-
Factorial calculation: Factorial is the sum of products of all numbers from a number to 1. For example, n!=n×(n−1)×(n−2)×...×1 5! = 5 * 4 * 3 * 2 * 1 = 120.
Factorial is the product of all positive integers from that number to 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
Copy after login
Here, the factorial function is calling itself until n becomes 1. When n is 1, the function no longer calls itself and returns 1. This result is progressively returned through previous calls, and the original call returns 120 as the final result.
When factorial(5) is called, it will first call 5 * factorial(4) and so on until factorial(0) where the base case condition is met.
-
Fibonacci Series: The Fibonacci series is a famous example where each number is the sum of the previous two numbers. F(n)=F(n−1)+F(n−2)
The Fibonacci series is a series of numbers where the first two numbers are 0 and 1, and each subsequent number is the sum of the two preceding numbers. For example, 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
Copy after login
Explanation:
-
Base Cases: If the value of n is 0, fibonacci(0) returns 0. If the value of n is 1, fibonacci(1) returns 1.
-
Recursive Case: In any other case, fibonacci(n) will call itself with n−1 and n−2 and return their sum.
Answer Explanation:
-
fibonacci(0) = 0
-
fibonacci(1) = 1
-
fibonacci(2) = fibonacci(1) + fibonacci(0) = 1 + 0 = 1
-
fibonacci(3) = fibonacci(2) + fibonacci(1) = 1 + 1 = 2
-
fibonacci(4) = fibonacci(3) + fibonacci(2) = 2 + 1 = 3
-
fibonacci(5) = fibonacci(4) + fibonacci(3) = 3 + 2 = 5
-
fibonacci(6) = fibonacci(5) + fibonacci(4) = 5 + 3 = 8
এভাবে fibonacci(6) এর মান দাঁড়ায় 8, যা 6-তম ফিবোনাচি সংখ্যা।
-
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
Copy after login
Recursion এর উপকারিতা এবং অসুবিধা
- উপকারিতা
-
কোড সরলতা: Recursion জটিল সমস্যাকে সহজভাবে প্রকাশ করতে সাহায্য করে, বিশেষ করে এমন সমস্যা যেখানে সমস্যাগুলি নিজের অনুরূপ।
-
কোড পুনরাবৃত্তি: Recursion প্রায়শই কোডের পুনরাবৃত্তি দূর করে এবং সমাধানগুলোকে ছোট এবং পরিষ্কার করে।
-
কিছু নির্দিষ্ট সমস্যা সমাধানে কার্যকর: যেমন Tree এবং Graph ডেটা স্ট্রাকচার traversal, অথবা Mathematical series এবং sequences।
- অসুবিধা
-
পারফরম্যান্স: প্রত্যেকটি recursive কল একটি নতুন execution context তৈরি করে, যা stack memory তে সংরক্ষণ করা হয়। অতিরিক্ত recursion এর ফলে stack overflow এর ঝুঁকি থাকে।
-
জটিলতা: সাধারণ লুপের তুলনায় কিছু ক্ষেত্রে recursion বোঝা কঠিন হতে পারে, বিশেষ করে শুরুতে।
-
অকার্যকর ফাংশন: কিছু ক্ষেত্রে, recursion অকার্যকর হতে পারে, যদি recursive ফাংশনের প্রতিটি কলের ফলে অনেক অপ্রয়োজনীয় গণনা হয়। এক্ষেত্রে Memoization বা Iterative পদ্ধতির ব্যবহার অধিক কার্যকরী।
The above is the detailed content of Detailed discussion about Recursion in JavaScript. For more information, please follow other related articles on the PHP Chinese website!