【问题标题】:Find Sum of Digits Using Recursion使用递归查找数字总和
【发布时间】:2021-01-02 10:56:16
【问题描述】:

对 Java 很陌生,但我正在编写一个教程,我必须使用递归找到用户输入整数的数字总和。到目前为止,这是我的代码:

公开课其他{

 public static void main(String[] arg) {

     Scanner s=new Scanner(System.in);
     System.out.println("Enter any integer: ");
     int sum=0;
     int x=s.nextInt();
     int y=recursion(x, sum);
     System.out.println("The Sum of the digits is: "+ y);

 }   

public static int recursion(int y, int sum) {
  if(y/10>=1) {
      int tempvar =y%10;
      int remain=y/10;
      sum+=tempvar;
      if(remain!=0) {
          recursion(remain, sum); 
      }
      return sum;     
  }
  else {            
      return y;
  }

}

所以如果我输入:123,它会返回 3。我在纸上一步一步地完成了这个程序,从逻辑上讲,我想不出我错过了什么。

【问题讨论】:

标签: java recursion


【解决方案1】:

两件事:

  1. 您忽略了递归调用的结果。

改变

recursion(remain, sum); 

sum = recursion(remain, sum);
  1. 在您的基本情况下,您忽略 sum,它是迄今为止数字的总和,并且只返回您处理的最后一个数字。

改变

return y;

return sum + y;

【讨论】:

  • Ahhhh 好的,这很有意义。不敢相信我错过了。我想在我的脑海里,我只是因为返回金额而跳过了它;
【解决方案2】:

您可以编写以下代码来解决您的问题:

public static void main(String[] arg) {

     Scanner s=new Scanner(System.in);
     System.out.println("Enter any integer: ");
     int sum=0;
     int x=s.nextInt();
     int y=recursion(x);
     System.out.println("The Sum of the digits is: "+ y);

 }   

public static int recursion(int y) {
  if(y/10>=1) {
      int tempvar =y%10;
      int remain=y/10;
      return tempvar + recursion(remain); 
  }
  else {            
      return y;
  }

}

变化:

  1. 您忽略了递归函数的返回值。
  2. 未正确应用终止条件。
  3. 无需在递归函数中传递当前结果。

请尝试我提供的代码,希望它能解决您的问题。

【讨论】:

    【解决方案3】:

    我用 C 写了一个程序:

    #include <stdio.h>
    
    int power(int x, int y) //calculates x^y.
    {
    int product = 1;
    for (int i = 0; i < y; i++)
    {
        product = product * x;
    }
    return (product);
    }
    
    int num_digits(int x) //returns number of digit.
    {
    int z;
    int i;
    for (i = 0;; i++)
    {
        z = x / power(10, i);
        if (z == 0)
            break;
    }
    return (i);
    }
    
    int first_digit(int x) //returns first digit.
    {
    int a = num_digits(x);
    int b = power(10, a - 1);
    int c = x / b;
    return (c);
    }
    
    void del_first_digit(int *x) //deletes the first digit of number and restores 
                                 //it at 
                                 //original address.
    {
    int a = *x;
    int b = first_digit(a);
    int c = num_digits(a);
    *x = (*x) - b * power(10, c - 1);
    }
    
    void main() //main()
    {
    int user_input;
    printf("give the input::");
    scanf("%d", &user_input);
    int digits = num_digits(user_input);
    int dump = 0;
    for (int i = 1; i <= digits; i++)
    {
        dump = dump + first_digit(user_input);
        del_first_digit(&user_input);
    }
    printf("SUM OF DIGITS OF THIS %d DIGIT NUMBER IS %d.",digits,dump);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2017-06-06
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多