Practice Questions for Recursion | Set 6

Question 1
Consider the following recursive C function. Let len be the length of the string s and num be the number of characters printed on the screen, give the relation between num and len where len is always greater than 0.

filter_none

edit
close

play_arrow

link
brightness_4
code

void abc(char *s)
{
    if(s[0] == '\0')
        return;
  
    abc(s + 1);
    abc(s + 1);
    printf("%c", s[0]);    
}

chevron_right


Following is the relation between num and len.

 num = 2^len-1 
s[0] is 1 time printed
s[1] is 2 times printed
s[2] is 4 times printed
s[i] is printed 2^i times
s[strlen(s)-1] is printed 2^(strlen(s)-1) times
total = 1+2+....+2^(strlen(s)-1)
      = (2^strlen(s)) - 1 

For example, the following program prints 7 characters.

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Thanks to bharat nag for suggesting this solution.



Question 2

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

 1
 2
 3
 3
 3
 3
 3

The main() function calls fun(1). fun(1) prints “1” and calls fun(fun(fun(2))). fun(2) prints “2” and calls fun(fun(fun(3))). So the function call sequence becomes fun(fun(fun(fun(fun(3))))). fun(3) prints “3” and returns 3 (note that count is not incremented and no more functions are called as the if condition is not true for count 3). So the function call sequence reduces to fun(fun(fun(fun(3)))). fun(3) again prints “3” and returns 3. So the function call again reduces to fun(fun(fun(3))) which again prints “3” and reduces to fun(fun(3)). This continues and we get “3” printed 5 times on the screen.

Please write comments if you find any of the answers/codes incorrect, or you want to share more information/questions about the topics discussed above.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


2


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.