#include<stdio.h>
int fun(int n)
{
    if(n > 0)
    {
        fun(--n);
        printf("%d ", n);
        fun(--n);
    }
}
int main()
{
    fun(3);
    return 0;
}

এই কোডটার আউটপুট আসেঃ ০ ১ ২ ০ প্রথম আউটপুটটা বুজতে পেরেছি কিন্তু পরের আউটপুট গুলো বুজতে পারছি না ???

asked 27 Jul '16, 13:44

Shamim_Ahmed's gravatar image

Shamim_Ahmed
336

edited 29 Jul '16, 10:45

output : 0 1 2 0 3 0 1 4 0 1 2 0 এই রকম আসে । 0 1 2 0 তো আশার কথা না

(27 Jul '16, 16:20) menon

দুঃখিত ! সংশোধন করা হয়েছে

(29 Jul '16, 10:46) Shamim_Ahmed

উপরোক্ত Recursion বুঝার জন্য ট্রি বা বাইনারি ট্রি (প্রত্যেক নোডের দুটি করে চাইল্ড থাকে) সম্পর্কে ধারনা থাকা প্রয়োজন। তাহলে শুরু করা যাক।

প্রথমে fun(5) কল দিলাম। fun(5) দুটি কল দিবে। fun(4) আর fun(3)।

alt text

এরপর fun(4) নিয়ে বা বাম সাইডের কলগুলো নিয়ে চিন্তা করবো। একটি Recursion ততক্ষণ কল হবে যতক্ষণ না বেস কেস বা কন্ডিশন ফুলফিল হবে। আমাদের এখানে বেস কেস n <= 0

তাহলে এরপর fun(4) কল করবে fun(3) আর fun(2) কে।

alt text

আবার বাম সাইডের কল নিয়ে চিন্তা করি। তাহলে fun(3) কল করবে fun(2) আর fun(1) কে।

alt text

আবার বাম সাইডের কল নিয়ে চিন্তা করি। তাহলে fun(2) কল করবে fun(1) আর fun(0) কে।

alt text

আবার বাম সাইডের কল নিয়ে চিন্তা করি। যেহেতু n এখনো 0 এর থেকে বড়, তাহলে fun(1) কল করবে fun(0) আর fun(-1) কে।

alt text

বেস কেস অনুসারে আর কোন কল প্রযোজ্য নয়। তাই এখন প্রিন্টের পালা।

কোড অনুসারে প্রিন্ট কিন্তু হবে শুধুমাত্র প্রথম কলটা। উদাহরণ স্বরূপ বলতে পারি আমাদের এখানে fun(0) প্রিন্ট হবে fun(-1) নয়।

তাহলে output হবেঃ

Output: 0

alt text

যেহেতু n এর মান প্রিন্ট করছি তাই fun(0) এর আউটপুট হবে ০। এরপর কি প্রিন্ট হবে? যে নোডকে এর আগে কল করা হয়েছে। অর্থাৎ fun(1) ।

Output: 0 1

alt text

তাহলে এখন জানি fun(1) কল করলে আউটপুট হবে ০ ১ । এরপর প্রিন্ট হবে fun(2) ।fun(2) এর দুটি চাইল্ড এরই আউটপুট আছে। fun(1) = 0 1 এবং fun(0) = 0। তার নিজের একটি আউটপুট fun(2) =2 আছে।

তাহলে প্রথমে (বাম থেকে) চাইল্ড fun(1) এরপর রুট fun(2) এবং এরপর চাইল্ড fun(0) প্রিন্ট হবে। যদি না বুঝে থাকেন তবে fun(1) এর আউটপুট কিভাবে আসলো খেয়াল করুন।

Output: 0 1 2 0

alt text

এরপর fun(3) এর আউটপুটের পালা। fun(2) =0 1 2 0 এবং fun(1) = 0 1

Output: 0 1 2 0 3 0 1

alt text

এরপর fun(4) এর আউটপুটের পালা। fun(3) =0 1 2 0 3 0 1 এবং fun(2) = 0 1 2 0

Output: 0 1 2 0 3 0 1 4 0 1 2 0

alt text

এরপর fun(5) এর আউটপুটের পালা। fun(4) =0 1 2 0 3 0 1 4 0 1 2 0 এবং fun(3) =0 1 2 0 3 0 1 ।

কিন্তু fun(3) প্রিন্ট হবে কোড অনুসারে? শেষ fun(--n) এর পর printf("%d ", n); দিলেই কিন্তু আমারা fun(-1) এবং fun(3) প্রিন্ট করতে পারতাম। তাই প্রিন্ট হবে শুধু fun(4) এর আউটপুট।

Output: 0 1 2 0 3 0 1 4 0 1 2 0
permanent link

answered 29 Jul '16, 14:25

Kaiser%20Ahmed's gravatar image

Kaiser Ahmed
3.2k522

ভাই fun(4) পযন্ত আউটপুট কেন দেখাবে সেটা বুঝি নাই :(

(31 Jul '16, 17:48) Shamim_Ahmed

        fun(--n);
        printf("%d ", n);
        fun(--n);

উপরের আর নিচের কোডে খালি একটা printf("%d ", n); পার্থক্য। শেষে printf("%d ", n); দেওয়া হয় নাই তাই শেষের কল fun(3) আর fun(-1) প্রিন্ট হচ্ছে না।


        fun(--n);
        printf("%d ", n);
        fun(--n);
        printf("%d ", n);

(31 Jul '16, 18:56) Kaiser Ahmed
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×7
×5

question asked: 27 Jul '16, 13:44

question was seen: 624 times

last updated: 31 Jul '16, 18:58