Practice Questions for Recursion | Set 5

Question 1

Predict the output of following program. What does the following fun() do in general?

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <iostream>
using namespace std;
int fun(int a, int b) 
    if (b == 0) 
        return 0; 
    if (b % 2 == 0) 
        return fun(a + a, b/2); 
      
    return fun(a + a, b/2) + a; 
  
int main() 
    cout << fun(4, 3) ; 
    return 0; 
  
// This code is contributed by SHUBHAMSINGH10

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

#include<stdio.h>
  
int fun(int a, int b) 
{
   if (b == 0)
       return 0;
   if (b % 2 == 0)
       return fun(a+a, b/2);
  
   return fun(a+a, b/2) + a;
}
  
int main()
{
  printf("%d", fun(4, 3));
  getchar();
  return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

/*package whatever //do not write package name here */
  
import java.io.*;
  
class GFG {
    static int fun(int a, int b) 
    
        if (b == 0
            return 0
        if (b % 2 == 0
            return fun(a + a, b/2); 
           
        return fun(a + a, b/2) + a; 
    
   
    public static void main (String[] args) 
    {
        System.out.println(fun(4, 3));
    }
}
// This code is contributed by SHUBHAMSINGH10

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

def fun(a, b):
    if (b == 0):
        return 0 
    if (b % 2 == 0):
        return fun(a + a, b//2
      
    return fun(a + a, b//2) +
  
# Driver code
  
print(fun(4, 3))
  
# This code is contributed by SHUBHAMSINGH10

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

using System;
  
class GFG{
  
    static int fun(int a, int b) 
    
        if (b == 0) 
            return 0; 
        if (b % 2 == 0) 
            return fun(a + a, b/2); 
          
        return fun(a + a, b/2) + a; 
    
      
    static public void Main () 
    
        Console.Write(fun(4, 3)); 
    
}
  
// This code is contributed by SHUBHAMSINGH10

chevron_right


Output:

12

It calulates a*b (a multipied b).

Question 2
In question 1, if we replace + with * and replace return 0 with return 1, then what does the changed function do? Following is the changed function.



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <iostream>
using namespace std;
    
int fun(int a, int b) 
   if (b == 0) 
       return 1; 
   if (b % 2 == 0) 
       return fun(a*a, b/2); 
    
   return fun(a*a, b/2)*a; 
    
int main() 
  cout << fun(4, 3) ; 
  getchar(); 
  return 0; 
  
//This code is contributed by shubhamsingh10

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

#include<stdio.h>
  
int fun(int a, int b)
{
   if (b == 0)
       return 1;
   if (b % 2 == 0)
       return fun(a*a, b/2);
  
   return fun(a*a, b/2)*a;
}
  
int main()
{
  printf("%d", fun(4, 3));
  getchar();
  return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

import java.io.*;
   
class GFG {
    static int fun(int a, int b) 
    
        if (b == 0
            return 1
        if (b % 2 == 0
            return fun(a*a, b/2); 
          
        return fun(a*a, b/2)*a; 
    
      
    public static void main (String[] args)
    
        System.out.println(fun(4, 3)); 
    
}
//This code is contributed by shubhamsingh10

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

def fun(a, b):
    if (b == 0):
        return 1 
    if (b % 2 == 0):
        return fun(a*a, b//2
      
    return fun(a*a, b//2)*
   
# Driver code
   
print(fun(4, 3))
  
# This code is contributed by shubhamsingh10

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

using System;
  
public class GFG{
      
    static int fun(int a, int b) 
    
        if (b == 0) 
            return 1; 
        if (b % 2 == 0) 
            return fun(a*a, b/2); 
          
        return fun(a*a, b/2)*a; 
    
      
      
    static public void Main ()
    
        Console.WriteLine(fun(4, 3)); 
    
}
// This code is contributed by shubhamsingh10

chevron_right


Output:

64

It calculates a^b (a raised to power b).



Question 3
Predict the output of following program. What does the following fun() do in general?

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <iostream>
using namespace std;
  
int fun(int n)
{
    if (n > 100)
        return n - 10;
    return fun(fun(n+11));
}
  
int main()
{
    cout << " " << fun(99) << " ";
    getchar();
    return 0;
}
  
// This code is contributed by Shubhamsingh10

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

#include<stdio.h>
  
 int fun(int n)
 {
   if (n > 100)
     return n - 10;
   return fun(fun(n+11));
 }
  
int main()
{
  printf(" %d ", fun(99));
  getchar();
  return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

import java.io.*;
  
class GFG {
    static int fun(int n)
    {
        if (n > 100)
            return n - 10;
        return fun(fun(n+11));
    }
      
    public static void main (String[] args) {
        System.out.println(" " + fun(99) + " ");
    }
}
// This code is contributed by Shubhamsingh10

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

def fun(n):
      
    if (n > 100):
        return n - 10
      
    return fun(fun(n + 11))
      
# Driver code
print(fun(99))
  
# This code is contributed by Shubhamsingh10

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

using System;
  
class GFG{
      
static int fun(int n)
{
    if (n > 100)
        return n - 10;
    return fun(fun(n + 11));
}
  
// Driver code    
static public void Main ()
    Console.WriteLine(fun(99));
}
}
  
// This code is contributed by Shubhamsingh10

chevron_right


Output:

91
fun(99) = fun(fun(110)) since 99 ? 100
           = fun(100)    since 110 > 100
           = fun(fun(111)) since 100 ? 100
           = fun(101)    since 111 > 100
           = 91        since 101 > 100

Returned value of fun() is 91 for all integer rguments n 101. This function is known as McCarthy 91 function.

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.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.




My Personal Notes arrow_drop_up

Improved By : SHUBHAMSINGH10

Article Tags :
Practice Tags :


5


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