মডিউল ১৯-৫ঃ ফেক্টরিয়াল
প্রবলেম লিংকঃ 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