রিকার্শন (Recursion) কী?
রিকার্শন হলো এমন একটি প্রোগ্রামিং টেকনিক যেখানে একটি ফাংশন নিজে নিজেকে কল করে। এটি একটি সমস্যাকে ছোট ছোট সাব-প্রব্লেমে ভাগ করে সমাধান করে। প্রতিটি রিকার্সিভ কল একটি বেস কেস (base case) तरफ এগিয়ে যায়, যেখানে রিকার্শন বন্ধ হয়।
N সংখ্যার যোগফল রিকার্শনে
সূত্র: sum(n) = array[n-1] + sum(n-1), বেস কেস: sum(0) = 0
ইনপুট ও আউটপুট উদাহরণ
ইনপুট:
Enter the value of N : 6 Enter the elements of array : 15 30 45 80 100 140
আউটপুট:
The total of N numbers is : 410
অ্যালগরিদম
- প্রোগ্রাম শুরু করুন
- N, my_sum, i এবং my_array[] ঘোষণা করুন
- ব্যবহারকারী থেকে N এবং অ্যারে এলিমেন্টগুলো ইনপুট নিন
- রিকার্সিভ ফাংশন RecursiveSum(array, index, N) ডিফাইন করুন:
- বেস কেস: যদি index == N হয়, 0 রিটার্ন করুন
- রিকার্সিভ কেস: array[index] + RecursiveSum(array, index+1, N) রিটার্ন করুন
- RecursiveSum(my_array, 0, N) কল করুন এবং ফলাফল স্টোর করুন
- ফলাফল প্রদর্শন করুন
- প্রোগ্রাম শেষ করুন
উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া
import java.util.Scanner;
public class ArraySum {
public static int RecursiveSum(int my_array[], int i, int N) {
if (i == N)
return 0;
return my_array[i] + RecursiveSum(my_array, i + 1, N);
}
public static void main(String[] args) {
int N, my_sum, i;
N = 6;
my_sum = 0;
System.out.println("Required packages have been imported");
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined");
System.out.print("Enter the value of N : ");
N = my_scanner.nextInt();
int my_array[] = new int[N];
System.out.println("Enter the elements of the array :");
for (i = 0; i < N; i++) {
my_array[i] = my_scanner.nextInt();
}
my_sum = RecursiveSum(my_array, 0, N);
System.out.println("\nThe total of N numbers is : " + my_sum);
}
}
রিকার্শন কীভাবে কাজ করে (ট্রেস)
অ্যারে: [15, 30, 45, 80, 100, 140], N=6
RecursiveSum(arr, 0, 6) = arr[0] + RecursiveSum(arr, 1, 6) = 15 + (arr[1] + RecursiveSum(arr, 2, 6)) = 15 + 30 + (arr[2] + RecursiveSum(arr, 3, 6)) = 15 + 30 + 45 + (arr[3] + RecursiveSum(arr, 4, 6)) = 15 + 30 + 45 + 80 + (arr[4] + RecursiveSum(arr, 5, 6)) = 15 + 30 + 45 + 80 + 100 + (arr[5] + RecursiveSum(arr, 6, 6)) = 15 + 30 + 45 + 80 + 100 + 140 + 0 = 410
ইটারেটিভ (Iterative) সমাধান (তুলনায়)
public static int iterativeSum(int[] arr) {
int sum = 0;
for (int num : arr) {
sum += num;
}
return sum;
}
// Java 8 Stream
int sum = Arrays.stream(arr).sum();
তুলনা: রিকার্শন vs ইটারেশন
| দিক | রিকার্শন | ইটারেশন |
|---|---|---|
| পাঠযোগ্যতা | উচ্চ (গাণিতিক সংজ্ঞার মতো) | মাঝারি |
| মেমোরি (স্ট্যাক) | O(n) - প্রতিটি কল স্ট্যাকে থাকে | O(1) - কনস্ট্যান্ট স্পেস |
| সময় জটিলতা | O(n) | O(n) |
| স্ট্যাক ওভারফ্লো ঝুঁকি | হ্যাঁ (বড় N-এ) | না |
| পারফরম্যান্স | धीম (ফাংশন কল ওভারহেড) | দ্রুত |