সি-তে ফ্যাক্টরিয়াল প্রোগ্রাম: কোন সংখ্যার ফ্যাক্টরিয়াল গণনা করব?



ধনাত্মক পূর্ণসংখ্যার ফ্যাক্টরিয়াল হল একটি পূর্ণসংখ্যা এবং এর নীচে সমস্ত পূর্ণসংখ্যার পণ্য। সি তে কীভাবে ফ্যাক্টরিয়াল প্রোগ্রাম লিখতে শিখুন উদাহরণ: 3! = 3 * 2 * 1

ধনাত্মক পূর্ণসংখ্যার ফ্যাক্টরিয়াল হ'ল একটি পূর্ণসংখ্যা এবং তার নীচের সমস্ত সংখ্যার গুণফল, অর্থাত্ n এর সংখ্যার ফ্যাকটোরিয়াল (এন দ্বারা উপস্থাপিত) দেওয়া হত

এন! = 1 * 2 * 3 * 4 *। । । । । * এন





0 এর ফ্যাক্টরিয়াল 1 টি সংজ্ঞায়িত করা হয় এবং এটি নেতিবাচক সংখ্যার জন্য সংজ্ঞায়িত হয় না। নীচে তালিকাভুক্ত রয়েছে এটির সন্ধানের একাধিক উপায় রয়েছে-

চল শুরু করি.



লুপের জন্য কারখানাটি ব্যবহার করে

এটি একটি সংখ্যার ফ্যাক্টরিয়াল সন্ধান করা সবচেয়ে সহজ এবং সহজ উপায়। আসুন প্রথমে কোডটি পরিদর্শন করুন -

# অন্তর্নির্মিত মেইন () {ইন্টি আই, নাম, ফ্যাক্ট = 1 // সংক্ষিপ্ত বিবরণটিকে 1 হিসাবে সংজ্ঞায়িত করা হওয়ায় সর্বনিম্ন মান হ'ল 1 প্রিন্টফ ('এটির ফ্যাক্টরিয়াল গণনা করার জন্য একটি সংখ্যা লিখুন') স্ক্যানফ ('% ডি', এবং সংখ্যা) যদি (সংখ্যা<0) //if the input is a negative integer { printf (“Factorial is not defined for negative numbers.”) } else { for(i=1i0, therefore fact value remains 1 { fact = fact * i // keeps on multiplying and storing in the value of factorial till the input integer is reached } printf(“Factorial of %d = %dn”, num, fact) } return 0 //since we have defined the main() method with a return value of integer type }

আউটপুট-

5 = 120 এর কারখানা



ব্যাখ্যা -

যার ফ্যাক্টরিয়ালটি সন্ধান করতে হবে সে নম্বরটি ইনপুট হিসাবে নেওয়া হয় এবং একটি ভেরিয়েবলে সংরক্ষণ করা হয় এবং এটি নেতিবাচক কিনা তা পরীক্ষা করা হয়। যদি প্রবেশ করা পূর্ণসংখ্যাটি নেতিবাচক হয় তবে উপযুক্ত বার্তা প্রদর্শিত হয়। ফ্যাক্টরিয়ালটির মান 1 হিসাবে পূর্বনির্ধারিত কারণ এর সর্বনিম্ন মান 1 হয় লুপের জন্য ধনাত্মক পূর্ণসংখ্যার জন্য কার্যকর করা হয় (0 বাদে পরীক্ষার শর্তটি মিথ্যা এবং এইভাবে সত্যটি শূন্য থাকে) remains লুপের জন্য, ফ্যাক্টরিয়ালটির মান প্রতিটি পূর্ণসংখ্যার সাথে গুণিত হয় এবং ইনপুট নম্বর পৌঁছানো পর্যন্ত ধারাবাহিকভাবে সংরক্ষণ করা হয়। উদাহরণস্বরূপ, ইনপুট = 5 এর জন্য প্রবাহটি লুপের দিকে যায় এবং নিম্নলিখিত পদক্ষেপগুলি ঘটে-

ফ্যাক্ট = 1, আই = 1 -> ফ্যাক্ট = 1 * 1 = 1 -> আই = 2
ফ্যাক্ট = 1, আই = 2 -> ফ্যাক্ট = 1 * 2 = 2 -> আই = 3
ফ্যাক্ট = 2, আই = 3 -> ফ্যাক্ট = 2 * 3 = 6 -> আই = 4
ফ্যাক্ট = 6, আই = 4 -> ফ্যাক্ট = 6 * 4 = 24 -> আই = 5
ফ্যাক্ট = 24, আই = 5 -> ফ্যাক্ট = 24 * 5 = 120 -> আই = 6

এখন 6> 5, সুতরাং পরীক্ষার শর্তটি মিথ্যা হয়ে যায় এবং লুপটি সমাপ্ত হয়। ফ্যাকটোরিয়ালটির মান প্রদর্শিত হয়।

ফ্যাক্টরিয়াল ফাংশন ব্যবহার করে

এই পদ্ধতির একটি মডুলার পদ্ধতির হিসাবে পরিচিত এবং প্রোগ্রামিংয়ের জন্য এটি বেশ দক্ষ হিসাবে অনুসরণ করা উচিত। এর সুবিধাগুলির মধ্যে একটি হ'ল আমাদের যখন কোড পরিবর্তন করতে হবে তখন সম্পূর্ণ কোড পরিবর্তন করার পরিবর্তে আমরা কেবল সংশ্লিষ্ট ফাংশনটি পরিবর্তন করতে পারি। এই পদ্ধতির ব্যবহার করে কোনও সংখ্যার ফ্যাক্টরিয়াল সন্ধানের কোডটি নীচে দেখানো হয়েছে

# ফ্যাক্টরিয়াল গণনা করার জন্য দীর্ঘ ফ্যাক্টরিয়াল (ইন্ট নম্ব) // ফাংশন অন্তর্ভুক্ত করুন যা প্যারামিটার হিসাবে একটি পূর্ণসংখ্যার মান নেয় এবং একটি প্রকারের মান প্রত্যাবর্তন করে {int i দীর্ঘ তথ্য = 1 (i = 1 i) এর জন্য<= num i++) fact = fact * i return fact //returns to function call } int main() //execution begins from main() method { int num printf('Enter a number to calculate its factorialn') scanf('%d', &num) if(num<0) //if the input is a negative integer { printf('Factorial is not defined for negative numbers.') } printf('Factorial of %d = %dn', num, factorial(num)) //call to factorial function passing the input as parameter return 0 } 

আউটপুট - 5 = 120 এর কারখানা

ব্যাখ্যা-

ওভাররাইড এবং ওভারলোডের মধ্যে পার্থক্য

প্রোগ্রামটির লজিকটি একই কারণ ব্যতীত বিভিন্ন ফাংশনটি ফ্যাক্টরিয়াল গণনা করার জন্য এবং কার্যকর পদ্ধতিটি যেখান থেকে শুরু হয় সেখান থেকে মূল পদ্ধতিতে ফেরত দেওয়া হয়।

পুনরাবৃত্তি ব্যবহার কারখানা

পুনরাবৃত্তি হ'ল প্রক্রিয়া যেখানে কোনও ফাংশন নিজেকে কল করে এবং সংশ্লিষ্ট ফাংশনটিকে পুনরাবৃত্ত ফাংশন বলে। এটি দুটি অংশ নিয়ে গঠিত- একটি বেস শর্ত এবং একটি পুনরাবৃত্তি কল। বেস শর্তটির সমাধান সরবরাহ করা হয় যখন বৃহত্তর মানটির সমাধানটি বেস সলিউশনে পৌঁছানো এবং ব্যবহার না হওয়া অবধি ছোট মানগুলিতে রূপান্তর করে সমাধান করা যায়।

নীচে পুনরাবৃত্তি ব্যবহার করে ফ্যাক্টরিয়াল সন্ধানের কোডটি রয়েছে:

# অন্তর্নিহিত তথ্য অন্তর্ভুক্ত করুন (int) // ফাংশন প্রোটোটাইপ ইন্ট মেইন () {int নাম্বার প্রিন্টফ ('নম্বরটি লিখুন যার ফ্যাক্টরিয়ালটি সন্ধান করতে হবে:') স্ক্যান্ফ ('% ডি', এবং সংখ্যা) যদি (সংখ্যা)<0) { printf('ERROR. Factorial is not defined for negative integers') } printf('Factorial of %d is %d', num, fact(num)) //first call is made return 0 } int fact(int num) { if(num==0) //base condition { return 1 } else{ return(num*fact(num-1)) //recursive call } } 

আউটপুট - 5 = 120 এর কারখানা

ব্যাখ্যা -ধরুন যে ব্যবহারকারী 5 টি ইনপুট হিসাবে প্রবেশ করে, তবে প্রধান () পদ্ধতিতে সংখ্যার মান 5 হয় the প্রবাহটি প্রিন্টফেট স্টেটমেন্ট (লাইন 12) এ যাওয়ার সাথে সাথে কল (ফ্যাক্ট) ফ্যাক্ট (5) করা হয়। এখন প্রকৃতপক্ষে (5) সংখ্যাটি 5 যা 0 এর সমান নয়, সুতরাং প্রবাহ অন্য বিবৃতিতে চলে যায় যেখানে রিটার্ন বিবৃতিতে একটি পুনরাবৃত্তি কল করা হয় এবং সত্য (4) হয়। বেস শর্তটি পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করা হয়, যেমন, সংখ্যা = 0 পৌঁছে যায় এবং 1 ফিরে আসে। এখন প্রবাহ সত্য (1) এ যায় যেখানে থেকে 1 (বাস্তব হিসাবে (1) নাম = 1) * 1 (সত্য (0)) থেকে ফিরে আসে। প্রয়োজনীয় মান প্রাপ্ত না হওয়া পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি হয়।

সময় ও স্থান জটিলতা - পুনরাবৃত্তি ভি / এস পুনরাবৃত্তি

পুনরাবৃত্তি জন্য-

সংক্রান্ত সময়ের জটিলতা , আমরা জানি যে ফ্যাকটোরিয়াল 0 হল একমাত্র তুলনা। অতএব টি (0) = 1। অন্য যে কোনও সংখ্যার ফ্যাক্টরিয়াল জন্য প্রক্রিয়াটির মধ্যে একটি তুলনা, একটি গুণ, একটি বিয়োগ এবং একটি ফাংশন কল জড়িত। অতএব

টি (এন) = টি (এন -1) +3
= টি (এন -২) +6
= টি (এন -3) +9
= এবং হেল্প
= টি (এন-কে) + 3 কে

যেহেতু আমরা টি (0) = 1 এবং কে = এন, (এন-কে) = 0 জানি

অতএব টি (এন) = টি (0) + 3 এন
= 1 + 3 এন

সুতরাং কোডের জটিলতা হ'ল ও (এন)।

সংক্রান্ত স্থান জটিলতা, প্রতিটি কলের জন্য একটি স্ট্যাক তৈরি করা হয় যা এর মান না হওয়া পর্যন্ত বজায় থাকবেগণিত এবং ফিরে। উদাহরণস্বরূপ n = 5 এর জন্য নিম্নলিখিত স্ট্যাকগুলি বজায় রাখতে হবে

চ (5) -> চ (4) -> চ (3) -> চ (2) -> চ (1) -> চ (0)

যেহেতু আমরা দেখতে পাচ্ছি যে f (0) এর কল পৌঁছেছে ততক্ষণ 5 টি স্ট্যাক বজায় রাখতে হবে যার মানজ্ঞাত এবং ফিরে আসে। সুতরাং এন ফ্যাক্টরিয়াল জন্য, n স্ট্যাক বজায় রাখতে হবে। সুতরাং স্থান জটিলতাও (এন) হয়। উপরের ছবিগুলি থেকে এটিও স্পষ্ট যে এন = 5, 5 স্ট্যাকের জন্য হতে হবেবজায় রাখা সুতরাং এন ফ্যাক্টরিয়াল জন্য, n স্ট্যাক বজায় রাখতে হবে। সুতরাং স্থান জটিলতা হ'ল (এন)।

Iteration-

সংক্রান্ত সময় জটিলতা, লুপের ভিতরে n পুনরাবৃত্তি রয়েছে, সুতরাং সময়ের জটিলতা হ'ল (এন)।

সংক্রান্ত স্থান জটিলতা, পুনরাবৃত্ত সমাধানের জন্য কেবলমাত্র একটি স্ট্যাক রয়েছে যা বজায় রাখা দরকার এবং একটি পূর্ণসংখ্যার ভেরিয়েবল ব্যবহার করা হয়। সুতরাং স্থান জটিলতা হ'ল ও (1)।

এই নিবন্ধটির জন্য এটিই। আমি আশা করি আপনি সময় জটিলতার সাথে সিতে ফ্যাক্টরিয়াল প্রোগ্রামের ধারণাটি বুঝতে পেরেছেন।

যদি আপনার কোনও প্রশ্ন আসে তবে নির্দ্বিধায় আপনার সমস্ত প্রশ্ন 'সি ইন ফ্যাক্টরিয়াল প্রোগ্রাম' এর মন্তব্য বিভাগে জিজ্ঞাসা করুন এবং আমাদের দলটি উত্তর দিতে পেরে খুশি হবে।