Practice Questions for Recursion | Set 6 - GeeksforGeeks

28 May, 2021
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. 
C++
C
Java
Python3
C#
Javascript
void abc(char *s){    if(s[0] == '\0')        return;      abc(s + 1);    abc(s + 1);    cout << s[0];   } // This code is contributed by shubhamsingh10
void abc(char *s){    if(s[0] == '\0')        return;     abc(s + 1);    abc(s + 1);    printf("%c", s[0]);   }
static void abc(char *s){    if(s[0] == '\0')        return;       abc(s + 1);    abc(s + 1);    System.out.print(s[0]);   } // This code is contributed by shubhamsingh10
def abc(s):    if(len(s) == 0):        return         abc(s[1:])    abc(s[1:])    print(s[0])     # This code is contributed by shubhamsingh10
static void abc(char *s){    if(s[0] == '\0')        return;     abc(s + 1);    abc(s + 1);    Console.Write(s[0]);} // This code is contributed by shubhamsingh10
<script>//Javascript Implementationfunction abc(s){    if(s.length == 0)        return;             abc(s.substring(1));    abc(s.substring(1));    document.write(s[0]);   } // This code is contributed by shubhamsingh10</script>
The following is the relationship 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. 
C++
C
Java
Python3
C#
Javascript
#include <bits/stdc++.h>using namespace std; void abc(char s[]){    if(s[0] == '\0')        return;     abc(s + 1);    abc(s + 1);    cout << s[0];} int main(){    abc("xyz");    return 0;}//This code is contributed by shubhamsingh10
#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;}
public class GFG{    static void abc(String s)    {        if(s.length() == 0)            return;              abc(s.substring(1));        abc(s.substring(1));        System.out.print(s.charAt(0));    }     public static void main(String[] args) {        abc("xyz");    }} // This code is contributed by divyeh072019
def abc(s):    if(len(s) == 0):        return         abc(s[1:])    abc(s[1:])    print(s[0],end="")  # Driver code abc("xyz") # This code is contributed by shubhamsingh10
using System;class GFG {         static void abc(string s)    {        if(s.Length == 0)            return;                     abc(s.Substring(1));        abc(s.Substring(1));        Console.Write(s[0]);    }   // Driver code  static void Main() {    abc("xyz");  }} // This code is contributed by divyeshrabadiya07
<script>// Javascript implementation function abc(s){    if(s.length == 0)        return;     abc(s.substring(1));    abc(s.substring(1));    document.write(s[0]);} abc("xyz"); //This code is contributed by shubhamsingh10</script>
Thanks to bharat nag for suggesting this solution.  
Question 2 
C++
C
Java
Python3
C#
Javascript
#include <iostream>using namespace std; int fun(int count){    cout << count << endl;    if(count < 3)    {        fun(fun(fun(++count)));    }    return count;} int main(){    fun(1);    return 0;} // This code is contributed by Shubhamsingh10
#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;}
import java.util.*;  class GFG{static int fun(int count){    System.out.println(count);    if(count < 3)    {        fun(fun(fun(++count)));    }    return count;} public static void main(String[] args){    fun(1);}} // This code is contributed by Shubhamsingh10
def fun(count):    print(count)    if(count < 3):        count+=1        fun(fun(fun(count)))         return count   if __name__=="__main__":          fun(1) # This code is contributed by Shubhamsingh10
using System; class GFG{         static int fun(int count)     {         Console.Write(count+"\n");         if(count < 3)         {             fun(fun(fun(++count)));         }         return count;     }            static public void Main ()    {         fun(1);      }} // This code is contributed by shubhamsingh10
<script>     function fun(count)    {        document.write(count + "</br>");        if(count < 3)        {            fun(fun(fun(++count)));        }        return count;    }         fun(1); </script>
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 the count is not incremented and no more functions are called as if the 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 it 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. 
SHUBHAMSINGH10
divyeshrabadiya07
divyesh072019
mukesh07
Misc
Recursion
Misc
Recursion
Misc
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to write Regular Expressions?
Software Engineering | Prototyping Model
Recursive Functions
Association Rule
Minimax Algorithm in Game Theory | Set 3 (Tic-Tac-Toe AI - Finding optimal move)
Write a program to print all permutations of a given string
Program for Tower of Hanoi
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Program for Sum of the digits of a given number
Backtracking | Introduction