এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখব যা বের করবে একটি ইন্টিজারকে দেওয়া n-তম ঘাতের ইউনিক নাম্বারগুলোর যোগফল হিসেবে কতভাবে প্রকাশ করা যায়।
আমাদের দুটি ইন্টিজার আছে number এবং power। এবং আমাদের বের করতে হবে দেওয়া number-কে n-তম ঘাতের ইউনিক প্রাকৃতিক সংখ্যার যোগফল হিসেবে কতভাবে রিপ্রেজেন্ট করা যায়। একটি উদাহরণ দেখি।
ইনপুট - number = 50, power = 2
আউটপুট - 3
৪ কে ২ ঘাতের যোগফল হিসেবে লিখতে শুধু একটিভাবে সম্ভব।
আমরা রিকার্শন ব্যবহার করব সমস্যাটি সমাধান করতে। সমস্যাটি সমাধানের ধাপগুলো:
- number এবং power ইনিশিয়ালাইজ করুন।
- একটি রিকার্সিভ ফাংশন লিখুন উপযুক্ত নামে। এটি number, power এবং i আর্গুমেন্ট হিসেবে নেবে।
- যদি number শূন্যের চেয়ে ছোট হয় বা pow(i, power) number-এর চেয়ে বড় হয়, তবে ০ রিটার্ন করুন।
- যদি number শূন্য হয় বা pow(i, power) number-এর সমান হয়, তবে ১ রিটার্ন করুন।
- ফাংশনের জন্য দুটি রিকার্সিভ কল থাকবে টোটাল উপায় বের করতে
- i বাড়ান।
- প্রথম রিকার্সিভ কল দিয়ে দেওয়া number-র চেয়ে ছোট নম্বর চেক করুন।
- দ্বিতীয় রিকার্সিভ কল দিয়ে দেওয়া number চেক করুন।
উদাহরণ
কোডটি দেখি।
#include <bits/stdc++.h>
using namespace std;
int findPossibleWaysCount(int number, int power, int i = 1) {
if (number < 0 || number < pow(i, power)) {
return 0;
}
if (number == 0 || number == pow(i, power)) {
return 1;
}
return findPossibleWaysCount(number - pow(i, power), power, i + 1) + findPossibleWaysCount(number, power, i + 1);
}
int main() {
// initializing the number and power
int number = 50, power = 2;
cout << findPossibleWaysCount(number, power) << endl;
return 0;
}
আউটপুট
3
উপসংহার
টিউটোরিয়ালে যদি কোনো প্রশ্ন থাকে, তবে কমেন্ট সেকশনে জানান।