কম্পিউটার টিউটোরিয়াল

জাভা প্রোগ্রাম: রিকার্শন (Recursion) ব্যবহার করে N সংখ্যার যোগফল বের করা

রিকার্শন (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

অ্যালগরিদম

  1. প্রোগ্রাম শুরু করুন
  2. N, my_sum, i এবং my_array[] ঘোষণা করুন
  3. ব্যবহারকারী থেকে N এবং অ্যারে এলিমেন্টগুলো ইনপুট নিন
  4. রিকার্সিভ ফাংশন RecursiveSum(array, index, N) ডিফাইন করুন:
    • বেস কেস: যদি index == N হয়, 0 রিটার্ন করুন
    • রিকার্সিভ কেস: array[index] + RecursiveSum(array, index+1, N) রিটার্ন করুন
  5. RecursiveSum(my_array, 0, N) কল করুন এবং ফলাফল স্টোর করুন
  6. ফলাফল প্রদর্শন করুন
  7. প্রোগ্রাম শেষ করুন

উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া

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 ইটারেশন

টেল রিকার্শন (Tail Recursion) অপ্টিমাইজেশন

জাভা টেল কল অপ্টিমাইজেশন (TCO) সাপোর্ট করে না, কিন্তু লজিক্যালি লেখা যায়:

public static int tailRecursiveSum(int[] arr, int index, int acc) {
    if (index == arr.length) return acc;
    return tailRecursiveSum(arr, index + 1, acc + arr[index]);
}
// কল: tailRecursiveSum(arr, 0, 0);

সতর্কতা

  • বড় অ্যারে (১০০০০+) এর জন্য স্ট্যাক ওভারফ্লো হতে পারে
  • প্রোডাকশন কোডে ইটারেশন বা Stream API ব্যবহার করুন
  • রিকার্শন মূলত শেখা ও ছোট সমস্যা সমাধানের জন্য উপযোগী
  1. দুটি পূর্ণসংখ্যা ও দুটি ফ্লোটিং পয়েন্ট সংখ্যার যোগফল বের করার C প্রোগ্রাম

  2. রিকার্সিভ ফাংশন ব্যবহার করে GCD বের করার সি প্রোগ্রাম

  3. প্রথম nটি প্রাকৃতিক সংখ্যার ঘনফলের যোগফল বের করার জাভা প্রোগ্রাম

  4. পাইথনে রিকার্শন দিয়ে প্রাকৃতিক সংখ্যাগুলোর যোগফল (Sum of Natural Numbers) বের করা

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
দিকরিকার্শনইটারেশন
পাঠযোগ্যতাউচ্চ (গাণিতিক সংজ্ঞার মতো)মাঝারি
মেমোরি (স্ট্যাক)O(n) - প্রতিটি কল স্ট্যাকে থাকেO(1) - কনস্ট্যান্ট স্পেস
সময় জটিলতাO(n)O(n)
স্ট্যাক ওভারফ্লো ঝুঁকিহ্যাঁ (বড় N-এ)না
পারফরম্যান্সधीম (ফাংশন কল ওভারহেড)দ্রুত