#include<stdio.h>
    void rec_print_str(char *s)
   {
     if(s[0] =='\0') return;
     rec_print_str(s+1);
     printf("%c",s[0]);
    //rec_print_str(s+1);
  }
  int main()
  {
     char s[]="soman";
     rec_print_str(s);
     printf("\n");
     return 0;
  }

এই প্রোগ্রামটা তে আমি যদি rec_print_str(s+1); এই লাইনটা printf("%c",s[0]); এর আগে দেই তাহলে আমার দেয়া স্ট্রিং টা কে উলটা প্রিন্ট করে কেন?আমি এর ভিতরের execution টা কিভাবে হয় সেটা বুঝতেসি না ।আমি আসলে প্রসেস টা জানতে বুঝতে চাচ্ছি । please help me..........

asked 27 May '15, 16:12

john's gravatar image

john
7310


rec_print_str(soman)//1st call


if(s[0] =='\0') return;//false go to next line
rec_print_str(s+1);//calling for oman
printf("%c",s[0]);//will print s but pending

 rec_print_str(oman)//2nd call
 if(s[0] =='\0') return;//false go to next line
 rec_print_str(s+1);//calling for man
 printf("%c",s[0]);//will print o but pending

  rec_print_str(man)//3rd call
 if(s[0] =='\0') return;//false go to next line
 rec_print_str(s+1);//calling for an
 printf("%c",s[0]);//will print m but pending

 rec_print_str(an)//4th call
 if(s[0] =='\0') return;//false go to next line
 rec_print_str(s+1);//calling for n
 printf("%c",s[0]);//will print a but pending

 rec_print_str(n)//5th call
 if(s[0] =='\0') return;//false go to next line
 rec_print_str(s+1);//calling for \0
 printf("%c",s[0]);//will print n but pending

rec_print_str(\0)//6th call
if(s[0] =='\0') return;//true and return to 5th call

now it will print n from 5th call
now it will print a from 4th call
now it will print m from 3rd call
now it will print o from 2nd call
now it will print s from 1st call

so outout is namos.

আর printf function যদি recursion এর আগে কল করা হতো তাহলে আগে character print হতো তখন output=soman হতো

permanent link

answered 27 May '15, 20:48

shaiful's gravatar image

shaiful
(suspended)

tnx a lot.....

(28 May '15, 08:32) john

এতো সুন্দর করে উত্তর দেয়ার জন্য ধন্যবাদ । কিন্তু ভাইয়া একটা বিষয় নিয়ে মনের মধ্যে খটকা রয়ে গেলো । এখানে প্রতিটা স্টেপ চেক করার পরে সব pending থাকছে । তার মানে recursive function টা যতক্ষণ Null character('\0') না পাবে ততক্ষণ সেটা pending থাকবে এবং যখন NULL character পাবে তখন সেই pending গুলো ক্রম অনুযায়ী প্রিন্ট করবে ? যদি একটু বলতেন ভাইয়া খুব উপকৃত হতাম ।

(28 May '15, 08:46) john

আপনার এই program এ আসলে তাই হচ্ছে।Normally যেখানে recursive function call হয় সেই function শেষ হয়ে পরের code execute হয়।আপনার printf function call হও্যার আগেই recursive function call চলতে থাকে এবং NULL পেলে আর কোনো recursion call হয় না তখন program টি আগের function এর code গুলো করতে থাকে।আপ্নি একটু কাগজে function গুলো code দিয়ে replace করলে বুজতে পারবেন।

(28 May '15, 10:11) shaiful

got it.tnx again......

(28 May '15, 12:03) john

recursion manee nijekeiiii bar bar call koraa,call koraa sesh holeee setaaa abar last thekee return hoiii aikhanee jemon "soman" ai string taa bar bar call hotee hotee null a jai tokhon je function thekee call koraa hoisilo seikhanee jaiii maneee "soman" er 'n' a jai then ->'a' then->m->o->a ai vabee return koree arr joneei ata reverse print hoseee arr ektaa kothaa printf a s[0] na likhee *s use korbenn,ashaa korii bujesennn

permanent link

answered 27 May '15, 17:55

Golam%20Kibria%20Sajib's gravatar image

Golam Kibria Sajib
479

edited 27 May '15, 17:56

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:

×17
×1

question asked: 27 May '15, 16:12

question was seen: 914 times

last updated: 28 May '15, 12:03