# Recursive Implementation of atoi()

• Difficulty Level : Easy
• Last Updated : 28 Jun, 2022

The atoi() function takes a string (which represents an integer) as an argument and returns its value. We have discussed iterative implementation of atoi(). How to compute recursively?

We strongly recommend you minimize your browser and try this yourself first

The idea is to separate the last digit, recursively compute the result for the remaining n-1 digits, multiply the result by 10 and add the obtained value to the last digit.

Below is the implementation of the idea.

## Java

 `// Recursive Java program to compute atoi()``class` `GFG{` `// Recursive function to compute atoi()``static` `int` `myAtoiRecursive(String str, ``int` `n)``{``    ``// If str is NULL or str contains non-numeric``    ``// characters then return 0 as the number is not``    ``// valid``    ``if` `(str == ``""` `|| str.matches(``"^[a-zA-Z0-9]+\$"``)) {``        ``return` `0``;``    ``}``    ``// Base case (Only one digit)``    ``if` `(n == ``1``)``    ``{``        ``return` `str.charAt(``0``) - ``'0'``;``    ``}``    ` `    ``// If more than 1 digits, recur for (n-1),``    ``// multiply result with 10 and add last digit``    ``return` `(``10` `* myAtoiRecursive(str, n - ``1``) +``                      ``str.charAt(n - ``1``) - ``'0'``);``}` `// Driver code``public` `static` `void` `main(String[] s)``{``    ``String str = ``"112"``;``    ``int` `n = str.length();``    ` `    ``System.out.println(myAtoiRecursive(str, n));``}``}`

## C++

 `// Recursive C program to compute atoi()``#include ``#include ``#include ` `using` `namespace` `std;` `// Recursive function to compute atoi()``int` `myAtoiRecursive(``char``* str, ``int` `n)``{``    ``// If str is NULL or str contains non-numeric``    ``// characters then return 0 as the number is not``    ``// valid``    ``int` `count = 0, check;``    ``// loop to count the no. of alphabets in str``    ``for` `(``int` `i = 0; i <= ``strlen``(str); ++i) {` `        ``// check if str[i] is an alphabet``        ``check = ``isalpha``(str[i]);` `        ``// increment count if str[i] is an alphabet``        ``if` `(check)``            ``++count;``    ``}``    ``if` `(count != 0) {``        ``return` `0;``    ``}``  ` `    ``// Base case (Only one digit)``    ``if` `(n == 1)``        ``return` `*str - ``'0'``;` `    ``// If more than 1 digits, recur for (n-1), multiply``    ``// result with 10 and add last digit``    ``return` `(10 * myAtoiRecursive(str, n - 1) + str[n - 1]``            ``- ``'0'``);``}` `// Driver Program``int` `main(``void``)``{``    ``char` `str[] = ``"112g"``;``    ``int` `n = ``strlen``(str);``    ``printf``(``"%d"``, myAtoiRecursive(str, n));``    ``return` `0;``}`

## Python3

 `# Python3 program to compute atoi()` `# Recursive function to compute atoi()``def` `myAtoiRecursive(string, num):``    ``# If str is NULL or str contains non-numeric``    ``# characters then return 0 as the number is not``    ``# valid``    ``if` `string.isalpha() :``         ``return` `0``;``      ` `    ``if``(``len``(string) ``=``=` `0``):``         ``return` `0``;``    ``# base case, we've hit the end of the string,``    ``# we just return the last value``    ``if` `len``(string) ``=``=` `1``:``        ``return` `int``(string) ``+` `(num ``*` `10``)``        ` `    ``# add the next string item into our num value``    ``num ``=` `int``(string[``0``:``1``]) ``+` `(num ``*` `10``)``    ` `    ``# recurse through the rest of the string``    ``# and add each letter to num``    ``return` `myAtoiRecursive(string[``1``:], num)` `# Driver Code   ``string ``=` `"112"` `print``(myAtoiRecursive(string, ``0``))`

## C#

 `// Recursive C# program to compute atoi()``using` `System;``using` `System.Text.RegularExpressions;``class` `GFG{` `// Recursive function to compute atoi()``static` `int` `myAtoiRecursive(``string` `str, ``int` `n)``{``    ``// If str is NULL or str contains non-numeric``    ``// characters then return 0 as the number is not``    ``// valid``    ``if` `(Regex.IsMatch(str, ``"^[a-zA-Z0-9]*\$"``)){``      ``return` `0;``    ``}``    ``// Base case (Only one digit)``    ``if` `(n == 1)``    ``{``        ``return` `str[0] - ``'0'``;``    ``}``    ` `    ``// If more than 1 digits, recur for (n-1),``    ``// multiply result with 10 and add last digit``    ``return` `(10 * myAtoiRecursive(str, n - 1) +``                                  ``str[n - 1] - ``'0'``);``}` `// Driver code``public` `static` `void` `Main()``{``    ``string` `str = ``"112"``;``    ``int` `n = str.Length;``    ` `    ``Console.Write(myAtoiRecursive(str, n));``}``}`

## Javascript

 ``

Output

`0`

Time complexity: O(n),
Auxiliary Space: O(n)