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

C#-এ রিকার্শন ব্যবহার করে দুটি সংখ্যার গুণফল বের করা

রিকার্শন ব্যবহার করে গুণফল বের করা bedeutet পুনরাবৃত্তি যোগ (repeated addition) এর মাধ্যমে গুণফল বের করা: a × b = a + a + ... + a (b বার)।

বেসিক রিকার্সিভ লজিক

  • বেস কেস: `b == 0` হলে `0` রিটার্ন
  • রিকার্সিভ কেস: `a + Multiply(a, b - 1)`

সম্পূর্ণ উদাহরণ


using System;

public class Calculation
{
    public static void Main()
    {
        int val1 = 10;
        int val2 = 20;
        
        Demo d = new Demo();
        int res = d.Product(val1, val2);
        
        Console.WriteLine($"{val1} × {val2} = {res}");
        Console.ReadLine();
    }
}

class Demo
{
    public int Product(int val1, int val2)
    {
        // অপ্টিমাইজেশন: ছোট সংখ্যাকে কাউন্টার হিসেবে ব্যবহার করুন
        if (val1 < val2)
            return Product(val2, val1); // Swap করে রিকার্শন ডেপথ কমান
        
        if (val2 == 0)
            return 0;
        
        return val1 + Product(val1, val2 - 1);
    }
}

আউটপুট


10 × 20 = 200

সমস্যা: স্ট্যাক ওভারফ্লো রিস্ক

বড় `val2` এর জন্য (যেমন ১০০০০০) স্ট্যাক ওভারফ্লো হবে কারণ প্রতিটি রিকার্সিভ কল স্ট্যাক ফ্রেম যোগ করে।

অপ্টিমাইজড পদ্ধতিগুলো

১. রাশিয়ান পিজান্ট মাল্টিপ্লিকেশন (O(log n))


public static int MultiplyRussianPeasant(int a, int b)
{
    int result = 0;
    while (b > 0)
    {
        if ((b & 1) != 0) // b বিজোড় হলে
            result += a;
        a <<= 1; // a = a * 2
        b >>= 1; // b = b / 2
    }
    return result;
}

২. বাইনরি এক্সপোনেনশিয়েশন-স্টাইল (O(log n) রিকার্সিভ)


public static int MultiplyFast(int a, int b)
{
    if (b == 0) return 0;
    if (b == 1) return a;
    
    int half = MultiplyFast(a, b / 2);
    if (b % 2 == 0)
        return half + half;
    else
        return a + half + half;
}

৩. বিল্ট-ইন অপারেটর (সর্বোত্তম)


int result = val1 * val2; // CPU ইনস্ট্রাকশন, O(1)

নেগেটিভ সংখ্যা হ্যান্ডলিং


public static int MultiplyWithNegatives(int a, int b)
{
    bool negativeResult = (a < 0) ^ (b < 0); // XOR: একটাই নেগেটিভ হলে
    a = Math.Abs(a);
    b = Math.Abs(b);
    
    int result = MultiplyFast(a, b); // উপরের ফাস্ট মেথড
    
    return negativeResult ? -result : result;
}

পারফরম্যান্স তুলনা (১০০০০ × ১০০০০)

পদ্ধতিটাইম কমপ্লেক্সিটিস্ট্যাক স্পেসনোট
নিবিড় রিকার্শনO(b)O(b)স্ট্যাক ওভারফ্লো রিস্ক
রাশিয়ান পিজান্ট (ইটেরেটিভ)O(log b)O(1)সর্বোত্তম ম্যানুয়াল ইমপ্লিমেন্টেশন
বাইনরি রিকার্শনO(log b)O(log b)বালান্সড
নেটিভ `*` অপারেটরO(1) হার্ডওয়্যারO(1)প্রোডাকশনে এটি ব্যবহার করুন

শিক্ষামূলক মূল্য

রিকার্শন দিয়ে গুণফল বের করা মূলত:

  • রিকার্শন কনসেপ্ট শেখানোর জন্য
  • আলগরিদমিক চিন্তাভাবনা বিকাশের জন্য
  • ইন্টারভিউ প্রশ্নের জন্য
রিয়াল ওয়ার্ল্ড অ্যাপ্লিকেশনে সবসময় `*` অপারেটর বা `Math.Multiply` ব্যবহার করুন।
  1. পাইথনে কিথ (Keith) সংখ্যা খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে রিকার্শন ব্যবহার করে একটি সংখ্যার ঘাত (Power) বের করা

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

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