📜  递归实现atoi()

📅  最后修改于: 2021-04-27 17:58:36             🧑  作者: Mango

atoi()函数将字符串(代表整数)作为参数并返回其值。

我们已经讨论了atoi()的迭代实现。如何递归计算?

我们强烈建议您最小化浏览器,然后先尝试一下
想法是分离最后一位,递归计算剩余的n-1位数字的结果,将结果乘以10,然后将获得的值加到最后一位。

以下是该想法的实现。

C++
// Recursive C program to compute atoi()
#include 
#include 
  
// Recursive function to compute atoi()
int myAtoiRecursive(char *str, int n)
{
    // Base case (Only one digit)
    if (n == 1)
        return *str - '0';
  
    // If more than 1 digits, recur for (n-1), multiplu result with 10
    // and add last digit
    return (10 * myAtoiRecursive(str, n - 1) + str[n-1] - '0');
}
  
// Driver Program
int main(void)
{
    char str[] = "112";
    int n = strlen(str);
    printf("%d", myAtoiRecursive(str, n));
    return 0;
}


Java
// Recursive Java program to compute atoi()
class GFG{
  
// Recursive function to compute atoi()
static int myAtoiRecursive(String str, int n)
{
      
    // Base case (Only one digit)
    if (n == 1)
    {
        return str.charAt(0) - '0';
    }
      
    // If more than 1 digits, recur for (n-1), 
    // multiplu 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));
}
}
  
// This code is contributed by rutvik_56


Python3
# Python3 program to compute atoi()
  
# Recursive function to compute atoi()
def myAtoiRecursive(string, num):
      
    # 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))
  
# This code is contributed by Frank-Hu-MSFT


C#
// Recursive C# program to compute atoi()
using System;
class GFG{
  
// Recursive function to compute atoi()
static int myAtoiRecursive(string str, int n)
{
      
    // Base case (Only one digit)
    if (n == 1)
    {
        return str[0] - '0';
    }
      
    // If more than 1 digits, recur for (n-1), 
    // multiplu 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));
}
}
  
// This code is contributed by Nidhi_Biet


输出:

112