মডিউল ১৯-৩ঃ প্রিন্ট ডিজিটস ইউজিং রিকারশন

প্রবলেম লিংকঃ D. Print Digits using Recursion

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

#include<stdio.h>
void fun(int n)
{
    if(n==0) return;   // বেস কেস। যখন সংখ্যাটি ১০ দিয়ে ভাগ করতে করতে শূন্য হয়ে যাবে। 
    int x=n%10;        // লাস্ট ডিজিট বের করে রাখা হচ্ছে। 
    fun(n/10);         // রিকারশন ফাংশনকে কল করা হচ্ছে।
    printf("%d ",x);   // ফাংশন কল হওয়া শেষে লাস্ট ডিজিটটি প্রিন্ট করা হচ্ছে।
}
int main()
{
    int test;
    scanf("%d",&test);        // টেস্টকেস ইনপুট নেওয়া হচ্ছে। 
    for(int t=0;t<test;t++)   // টেস্টকেস এর উপর লুপ চালানো হচ্ছে। 
    {
        int n;
        scanf("%d",&n);       // সংখ্যা ইনপুট নেওয়া হচ্ছে। 
        fun(n);               // রিকারশন ফাংশনকে কল করা হচ্ছে। 
        if(n==0)              // যদি সংখ্যাটি জিরো হয় তাহলে ফাংশন থেকে কিছু প্রিন্ট হবে না। কারন বেস কেসে আমরা জিরো দিয়ে করেছি। 
        {
            printf("0");      // ইনপুটে জিরো থাকলে জিরো প্রিন্ট করে দিচ্ছি সরাসরি। 
        }
        printf("\n");
    }
    return 0;
}

Last updated