মডিউল ১৯-৫ঃ ফেক্টরিয়াল

প্রবলেম লিংকঃ J. Factorial

প্রবলেম স্টেটমেন্টঃ ইনপুটে একটি সংখ্যা দেওয়া থাকবে। সেই সংখ্যার ফেক্টরিয়াল প্রিন্ট করতে হবে। সল্যুশনঃ প্রথমে সংখ্যাটি ইনপুট নিব। কোন সংখ্যার ফেক্টরিয়াল হচ্ছে ১ থেকে ওই সংখ্যা পর্যন্ত গুনফল। 5! = 1 x 2 x 3 x 4 x 5 4! = 1 x 2 x 3 x 4 এরকম। এখানে খেয়াল করলে দেখতে পাব 5! কে 5 x 4! এভাবে লিখা যায়। কারন 4! হচ্ছে 1 x 2 x 3 x 4 যার সাথে 5 গুন করলে 1 x 2 x 3 x 4 x 5 হয়ে যায় অর্থাৎ 5! যেকোন ফেক্টরিয়ালকে এভাবে লিখা যায়ঃ n! = n x (n-1)! এটি আমরা এখন রিকারশন দিয়ে করব। আমরা রিকারশন ফাংশনকে বলব n-1 এর ফেক্টরিয়াল বের করে আনতে। আমরা ধরে নিব সে n-1 এর ফেক্টরিয়াল বের করে নিয়ে আসবে। তারপর আমরা জাস্ট ওটার সাথে n গুন করে দিব। তাহলেই n! চলে আসবে।

#include<stdio.h>
long long int fact(long long int n)
{
    // base case
    if(n==0)          // বেস কেস হিসেবে ০ দেওয়া হয়েছে। আমরা n থেকে ১ পর্যন্ত গুন করতে হবে। তাই ০ তে আসলে আমরা গুন করা থামিয়ে দিব।   
    {
        return 1;     // ১ রিটার্ন করা হচ্ছে, কারন বেস কেসে আসা মানে হচ্ছে আমাদের ফেক্টরিয়াল বের করা শেষ। তাই তার সাথে ১ গুন করে রিটার্ন করে দিচ্ছি। গুনফল এর সাথে ১ গুন করায় গুনফলের কোন পরিবর্তন হচ্ছে না। এখানে আমরা ০ রিটার্ন করি নি কারন গুনফলের সাথে ০ গুন করলে সম্পূর্ণ গুনফল ০ হয়ে যাবে।
        
    }
    long long int ans=fact(n-1);   // রিকারশন ফাংশনকে বলছি n-1 এর ফেক্টরিয়াল বের করে আনতে। আমরা ধরে নিব সে n-1 এর ফেক্টরিয়াল বের করে নিয়ে আসবে।
    return ans*n;           // তারপর সেই n-1 এর ফেক্টরিয়াল এর সাথে আমরা n কে গুন করে রিটার্ন করে দিচ্ছি যা আমাদের আন্সার।
}
int main()
{
    long long int n;        
    scanf("%lld",&n);        // সংখ্যাটি ইনপুট নিচ্ছি। 
    long long int ans=fact(n);    //  রিকারশন ফাংশনকে কল করছি এবং ফাংশনের রিটার্ন করা আন্সার স্টোর করছি।
    printf("%lld",ans);         // আন্সার প্রিন্ট করছি। 
    return 0;
}

Last updated