使用递归查找数字总和

时间:2018-01-31 16:59:10

标签: java recursion

对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.我在纸上逐步完成了这个程序,从逻辑上讲,我无法想到我错过的任何内容。

3 个答案:

答案 0 :(得分:1)

两件事:

  1. 您忽略了递归通话的结果。
  2. 更改

    recursion(remain, sum); 
    

    sum = recursion(remain, sum);
    
    1. 在您的基础情况下,您忽略sum,这是到目前为止的数字之和,并且只返回您处理的最后一位数字。
    2. 更改

      return y;
      

      return sum + y;
      

答案 1 :(得分:1)

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

ID  FI  SERIAL sortorder
1   5    3     id,fi,serial
4   2    2     id,fi,serial
3   2    7     id,fi,serial

变更:

  1. 您忽略了递归函数的返回值。
  2. 未正确应用终止条件。
  3. 无需在递归函数中传递当前结果。
  4. 请尝试我提供的代码,我希望它能解决您的问题。

答案 2 :(得分:1)

我用 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);
}