মডিউল ১৯-৬ঃ ম্যাক্স নাম্বার

প্রবলেম লিংকঃ K. Max Number

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

#include<stdio.h>
#include<limits.h>
int fun(int a[],int n,int i)
{
    if(i==n)             // বেস কেস। যখন আমরা এরের বাইরে চলে যাব অর্থাৎ ইন্ডেক্স n এ চলে যাব।
    {
        return INT_MIN;   // তখন আমরা INT_MIN রিটার্ন করে দিব যেহেতু আমরা সবচেয়ে বড় সংখ্যাটি বের করছি। 
    }
    int mx=fun(a,n,i+1);  // রিকারশনকে পরের ইন্ডেক্স পাস করে দিয়ে বলছি ওখান থেকে সবচেয়ে বড় ভেলুটি বের করে নিয়ে আসতে।
    if(a[i] > mx)     // তারপর আমরা কম্পেয়ার করে দেখব আমাদের কাছে যে ভেলুটি ছিল সেটি এবং রিকারশন থেকে রিটার্ন আসা ভেলুর মধ্যে কোনটি বড়।
    { 
        return a[i];   //  যেটি বড় সেটি আমরা মেইন ফাংশনে রিটার্ন করে দিব আন্সার হিসেবে। 
    } 
    else 
    {
        return mx;
    }
}
int main()
{
    int n;
    scanf("%d",&n);        // এরে সাইজ ইনপুট নিচ্ছি। 
    int a[n];              // সেই সাইজের এরে ডিক্লেয়ার করছি। 
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);  // এরে ইনপুট নিচ্ছি। 
    }
    int mx=fun(a,n,0);      // রিকারশন ফাংশনে এরে, এরের সাইজ এবং স্টারটিং ইন্ডেক্স হিসেবে ০ দেওয়া হচ্ছে। 
    printf("%d\n",mx);      // রিকারশন থেকে রিটার্ন আসা রেজাল্ট প্রিন্ট হচ্ছে। 
    return 0;
}

Last updated