簡體   English   中英

使用遞歸求數字總和

[英]Find Sum of Digits Using 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。我一步一步地在紙上完成了這個程序,從邏輯上講,我想不出我錯過的任何東西。

兩件事:

  1. 您忽略了遞歸調用的結果。

改變

recursion(remain, sum); 

sum = recursion(remain, sum);
  1. 在您的基本情況下,您忽略sum ,這是迄今為止數字的總和,並僅返回您處理的最后一位數字。

改變

return y;

return sum + y;

這是您可以編寫的代碼來解決您的問題:

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. 無需在遞歸函數中傳遞當前結果。

請嘗試我提供的代碼,我希望它能解決您的問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM