শুক্রবার, ২৪ জুন, ২০১৬

Recursive Functions বাংলায় শিখুন ২

এখানে আমি আর ভাল ভাবে বুঝানোর চেষ্টা করব কি ভাবে recursion কাজ করে_

পূর্বে আমরা recursive function সম্পর্কে দেখেছি। আরও ভালো ভাবে বুঝার জন্য নিচের post টা দেকতে পারেন_

recursive function টা অনেকটা একসঙ্গে  অনেকগুলো plate রাখার মতো  কাজ করে ।যেটা আগে রাখা হয়  সেটা সবার পরে বের করতে হয়।


এবার code টা দেখা যাক-

#include<stdio.h>
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int a=1;
int b=10;
int c=20;
int f(int a)
{
    if(a>5)
        return 0;
    else
    {
        return a+f(a+1);
    }
}
int main()
{
    int s;
    s=f(1);
    printf("%d",s);
}

Output: 15

এখন প্রশ্ন হল কিভাবে code টা কাজ করছে তাই না ?

  1. main function এ গিয়া f(1) function টাকে call করবে। সুতরাং a=1 প্রথম অবস্থায়
  2. f(int a) function এ গিয়ে condition check করবে। condition মিথ্যা তাই সে return a+f(a+1); এ f(a+1) দ্বারা পুনরায় call করবে।
  3.  প্রতি call এ  যদি a এর মান  5 এর চে কম হয় তবে প্রতিবার a+f(a+1) return করবে।
  4. আবার condition check করবে। condition মিথ্যা ববে a+f(a+1) return করবে।
  5. এভাবে যখন না condition সত্য হয় ততোক্ষণ return  করবে।
  6. প্রতিবার এ f(a+1) function টা a এর মান ১ বৃদ্ধি করে দিচ্ছে এবং সেই মান দিয়েই call করছে। বেপারটা এরকম।
 1+f(a+1)        a=1;
2+f(a+1)         a=2
3+f(a+1)         a=3
4+f(a+1)         a=4
5+f(a+1)         a=5
a এর মান যখন 6 তখন return 0 করবে। ভাল ভাবে বঝার জন্য f(a+1) এর মান ans ধরে নেই , তাহলে বেপারটাএমন হয় 
 1+ans       a=1;
2+ans         a=2
3+ans        a=3
4+ans         a=4
5+ans         a=5
যেহেতু সবার শেষে 0 return করছে সেহেতু ans=0.

আমি আগেই বলেছি যে recursive function টা অনেকটা একসঙ্গে  অনেকগুলো plate রাখার মতো  কাজ করে ।যেটা আগে রাখা হয়  সেটা সবার পরে বের করতে হয়। 

 কাজ সম্পাদন করার সময় অনুযায়ী উপর থেকে নিচে  সাজালে আমরা পাই
ans=0;
5+ans         a=5
4+ans         a=4
3+ans        a=3
2+ans         a=2
1+ans          a=1;
তাহলে কাজ টা এমন হবে-
ans=5+0     [ যেহেতু ans=0 ছিল]
ans=4+5    [ যেহেতু ans=5=5+0 ছিল]
ans=3+9    [ যেহেতু ans=9=4+5 ছিল]
ans=2+12    [ যেহেতু ans=12=3+9 ছিল]
ans=1+14    [ যেহেতু ans=14=2+12ছিল]
ans=15    [ যেহেতু ans=15=1+14 ছিল]




কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন