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

জাভা প্রোগ্রাম: রিকার্শন ব্যবহার করে প্রাকৃতিক সংখ্যা (Natural Numbers) এর যোগফল বের করা

প্রাকৃতিক সংখ্যা (Natural Numbers) ও তাদের যোগফল

প্রাকৃতিক সংখ্যা হলো ১ থেকে শুরু হওয়া ধনাত্মক পূর্ণসংখ্যাগুলো (১, ২, ৩, ৪, ...)। প্রথম nটি প্রাকৃতিক সংখ্যার যোগফল বের করার সূত্র: S(n) = n(n+1)/2।

রিকার্শনে: sum(n) = n + sum(n-1), বেস কেস: sum(0) = 0

ইনপুট ও আউটপুট উদাহরণ

ইনপুট:

Enter the number : 25

আউটপুট:

The sum of natural numbers up to 25 is 325

অ্যালগরিদম

  1. প্রোগ্রাম শুরু করুন
  2. দুটি ইন্টিজার ভেরিয়েবল ঘোষণা করুন: my_input, my_sum
  3. ব্যবহারকারী থেকে সংখ্যা ইনপুট নিন
  4. রিকার্সিভ ফাংশন Add(n) ডিফাইন করুন:
    • বেস কেস: যদি n <= 0 হয়, 0 রিটার্ন করুন
    • রিকার্সিভ কেস: n + Add(n - 1) রিটার্ন করুন
  5. Add(my_input) কল করুন এবং ফলাফল স্টোর করুন
  6. ফলাফল প্রদর্শন করুন
  7. প্রোগ্রাম শেষ করুন

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

import java.util.Scanner;

public class NaturalNumbers {
    public static void main(String[] args) {
        int my_input, my_sum;
        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 number : ");
        my_input = my_scanner.nextInt();
        System.out.println("The number is defined as " + my_input);
        
        my_sum = Add(my_input);
        System.out.println("The sum of natural numbers up to " + my_input + " is " + my_sum);
    }
    
    public static int Add(int my_input) {
        if (my_input > 0)
            return my_input + Add(my_input - 1);
        else
            return my_input; // 0 বা 네가েটিভ হলে 0
    }
}

উদাহরণ ২: পূর্বনির্ধারিত মান ব্যবহার

public class NaturalNumbers {
    public static void main(String[] args) {
        int my_input = 25, my_sum;
        System.out.println("The number is defined as " + my_input);
        my_sum = Add(my_input);
        System.out.println("The sum of natural numbers up to " + my_input + " is " + my_sum);
    }
    
    public static int Add(int my_input) {
        if (my_input > 0)
            return my_input + Add(my_input - 1);
        else
            return my_input;
    }
}

রিকার্শন ট্রেস (Add(5))

Add(5)
= 5 + Add(4)
= 5 + (4 + Add(3))
= 5 + 4 + (3 + Add(2))
= 5 + 4 + 3 + (2 + Add(1))
= 5 + 4 + 3 + 2 + (1 + Add(0))
= 5 + 4 + 3 + 2 + 1 + 0
= 15

গাণিতিক সূত্র (O(1) সমাধান - সেরা পদ্ধতি)

public static int sumFormula(int n) {
    if (n <= 0) return 0;
    return n * (n + 1) / 2; // গাউসের সূত্র
}

// লং রিটার্ন (ওভারফ্লো এড়াতে)
public static long sumFormulaLong(int n) {
    return (long) n * (n + 1) / 2;
}

তুলনা: রিকার্শন vs সূত্র vs লুপ

পদ্ধতিসময় জটিলতাস্পেস জটিলতানোট
রিকার্শনO(n)O(n)স্ট্যাক ওভারফ্লো রিস্ক (n > 10000)
ফর লুপO(n)O(1)সিম্পল, নিরাপদ
গাণিতিক সূত্রO(1)O(1)সবচেয়ে দ্রুত, প্রোডাকশন রেডি
Stream APIO(n)O(1)IntStream.rangeClosed(1, n).sum()

Java 8+ Stream API

// প্যারালেল স্ট্রিম (বড় n-এ দ্রুত)
long sum = LongStream.rangeClosed(1, n).parallel().sum();

// বক্সড ইন্টিজার
int sum = IntStream.rangeClosed(1, n).sum();

নেগেটিভ ইনপুট হ্যান্ডলিং

public static int sumNatural(int n) {
    if (n <= 0) return 0;
    // আপনার পছন্দের পদ্ধতি
    return n * (n + 1) / 2;
}

সम्बद्ध সমস্যা: জোড়/বিজোড় প্রাকৃতিক সংখ্যার যোগফল


// প্রথম nটি জোড় সংখ্যার যোগফল: n(n+1)
public static int sumEven(int n) { return n * (n + 1); }

// প্রথম nটি বিজোড় সংখ্যার যোগফল: n²
public static int sumOdd(int n) { return n * n; }

// ১ থেকে n পর্যন্ত জোড় সংখ্যার যোগফল
public static int sumEvenUpto(int n) {
    int k = n / 2;
    return k * (k + 1);
}

// ১ থেকে n পর্যন্ত বিজোড় সংখ্যার যোগফল
public static int sumOddUpto(int n) {
    int k = (n + 1) / 2;
    return k * k;
}

বাস্তব প্রয়োগ

  • সিরিজ যোগফল (Arithmetic progression)
  • লুপ কমপ্লেক্সিটি অ্যানালাইসিস
  • গেম স্কোর ক্যালকুলেশন
  • ফাইন্যান্সিয়াল ক্যালকুলেশন (অ্যানুইটি)

সতর্কতা

  • রিকার্শন শুধু শেখার জন্য - প্রোডাকশনে সূত্র বা লুপ ব্যবহার করুন
  • Integer ওভারফ্লো: n ≈ 46340 এর বেশি হলে n*(n+1) ওভারফ্লো করে → long ব্যবহার করুন
  • স্ট্যাক ওভারফ্লো: n > ~১০০০০ হলে (JVM সেটিংস অনুযায়ী)
  1. রিকার্সিভ ফাংশন ব্যবহার করে GCD বের করার সি প্রোগ্রাম

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

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

  4. Python-এ প্রাকৃতিক সংখ্যার যোগফল (Sum of Natural Numbers) বের করা