Recursive Implementation of atoi()

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
C++
Python3
C#
Javascript
// 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 codepublic static void main(String[] s){    String str = "112";    int n = str.length();         System.out.println(myAtoiRecursive(str, n));}}
// Recursive C program to compute atoi()#include <cctype>#include <cstring>#include <iostream> 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 Programint main(void){    char str[] = "112g";    int n = strlen(str);    printf("%d", myAtoiRecursive(str, n));    return 0;}
# 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))
// 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 codepublic static void Main(){    string str = "112";    int n = str.Length;         Console.Write(myAtoiRecursive(str, n));}}
<script>    // Recursive Javascript program to compute atoi()         // Recursive function to compute atoi()    function myAtoiRecursive(str, n)    {        // If str is NULL or str contains non-numeric        // characters then return 0 as the number is not        // valid         if (str.match(/^[0-9A-Za-z]+$/)) {         return 0;         }        // Base case (Only one digit)        if (n == 1)        {            return str[0].charCodeAt() - '0'.charCodeAt();        }         // 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].charCodeAt() - '0'.charCodeAt());    }         let str = "112";    let n = str.length;          document.write(myAtoiRecursive(str, n));  </script>
0
Time complexity: O(n), Auxiliary Space: O(n)
This article is contributed by Narendra Kangralkar. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
fhu004
rutvik_56
nidhi_biet
varshagumber28
decode2207
surbhikumaridav
devendrasalunke
hardikkoriintern
Recursion
Strings
Strings
Recursion
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Backtracking | Introduction
Print all subsequences of a string
Recursive Practice Problems with Solutions
Print all possible combinations of r elements in a given array of size n
Reverse a stack using recursion
Write a program to reverse an array or string
Reverse a string in Java
C++ Data Types
Check for Balanced Brackets in an expression (well-formedness) using Stack
Longest Common Subsequence | DP-4