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

ডাইনামিক প্রোগ্রামিং ব্যবহার করে C++ প্রোগ্রাম: সংখ্যার ফ্যাক্টোরিয়াল বের করা


একটি ধনাত্মক পূর্ণসংখ্যা n-র ফ্যাক্টোরিয়াল হলো 1 × 2 × 3 × ... × n। ঋণাত্মক সংখ্যার ফ্যাক্টোরিয়াল অস্তিত্বে নেই। নিচে ডাইনামিক প্রোগ্রামিং পদ্ধতিতে দিয়ে ফ্যাক্টোরিয়াল হিসাব করার একটি C++ প্রোগ্রাম দেওয়া হলো।

অ্যালগরিদম

শুরু fact(int n):
    সংখ্যা n পড়ুন
    आरম্ভ করুন
        i = 1, result[1000] = {0}
        result[0] = 1
    i = 1 থেকে n পর্যন্ত
        result[i] = i * result[i-1]
    result প্রিন্ট করুন
শেষ

উদাহরণ কোড

#include <iostream>
using namespace std;

int result[1000] = {0};

int fact(int n) {
    if (n >= 0) {
        result[0] = 1;
        for (int i = 1; i <= n; ++i) {
            result[i] = i * result[i - 1];
        }
        return result[n];
    }
}

int main() {
    int n;
    while (true) {
        cout << "ফ্যাক্টোরিয়াল বের করতে পূর্ণসংখ্যা দিন (বের হওয়ার জন্য 0 দিন): ";
        cin >> n;
        if (n == 0)
            break;
        cout << fact(n) << endl;
    }
    return 0;
}

আউটপুট

ফ্যাক্টোরিয়াল বের করতে পূর্ণসংখ্যা দিন (বের হওয়ার জন্য 0 দিন): 2
2
ফ্যাক্টোরিয়াল বের করতে পূর্ণসংখ্যা দিন (বের হওয়ার জন্য 0 দিন): 6
720
ফ্যাক্টোরিয়াল বের করতে পূর্ণসংখ্যা দিন (বের হওয়ার জন্য 0 দিন): 7
5040
ফ্যাক্টোরিয়াল বের করতে পূর্ণসংখ্যা দিন (বের হওয়ার জন্য 0 দিন): 10
3628800
ফ্যাক্টোরিয়াল বের করতে পূর্ণসংখ্যা দিন (বের হওয়ার জন্য 0 দিন): 0

ব্যাখ্যা

এই প্রোগ্রামে result নামক একটি গ্লোবাল অ্যারে ব্যবহার করা হয়েছে যাতে পূর্বে গণনা করা ফ্যাক্টোরিয়াল মানগুলো সংরক্ষণ থাকে। এটি ডাইনামিক প্রোগ্রামিং-এর মেমোইজেশন (memoization) কৌশল। fact() ফাংশনটি প্রথমে result[0] = 1 সেট করে (কারণ 0! = 1)। তারপর একটি লুপ চালিয়ে 1 থেকে n পর্যন্ত প্রতিটি ইনডেক্সের জন্য ফ্যাক্টোরিয়াল মান গণনা করে সংরক্ষণ করে। যেহেতু প্রতিটি মান পূর্বের মানের ওপর নির্ভরশীল, এটি O(n) সময় কমপ্লেক্সিটিতে সমস্যা সমাধান করে।

দ্রষ্টব্য: বড় সংখ্যার ফ্যাক্টোরিয়াল (যেমন 20-এর বেশি) int টাইপে ফিট না করলে long long বা বড় সংখ্যা হ্যান্ডল করার লাইব্রেরি ব্যবহার করা উচিত।

  1. রিকার্সন ব্যবহার করে ফ্যাক্টোরিয়াল ক্যালকুলেট করার C++ প্রোগ্রাম (একাধিক টেস্ট কেস)

  2. C++ প্রোগ্রাম: ফ্যাক্টোরিয়াল (Factorial) নির্ণয়

  3. জাভা প্রোগ্রাম: রিকার্শন ব্যবহার করে ফ্যাক্টোরিয়াল (Factorial) বের করা

  4. জাভা প্রোগ্রাম: একটি সংখ্যার ফ্যাক্টোরিয়াল নির্ণয়