# Practice Questions for Recursion | Set 5

• Difficulty Level : Medium
• Last Updated : 21 Jun, 2022

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

## C++

 `#include ``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`

## C

 `#include` `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;``}`

## Java

 `/*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`

## Python3

 `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``) ``+` `a` `# Driver code` `print``(fun(``4``, ``3``))` `# This code is contributed by SHUBHAMSINGH10`

## C#

 `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`

## Javascript

 ``

Output:

`12`

It calculates a*b (a multiplied 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++

 `#include ``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`

## C

 `#include` `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;``}`

## Java

 `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`

## Python3

 `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``)``*``a`` ` `# Driver code`` ` `print``(fun(``4``, ``3``))` `# This code is contributed by shubhamsingh10`

## C#

 `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`

## Javascript

 ``

Output:

`64`

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

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

## C++

 `#include ``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`

## C

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

## Java

 `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`

## Python3

 `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`

## C#

 `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`

## Javascript

 ``

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```

Time complexity: O(n)

Space Complexity: O(1)

The returned value of fun() is 91 for all integer arguments n 101. This function is known as McCarthy 91 function.