Java 1学生完全输了。递归程序

时间:2016-09-21 01:09:49

标签: java recursion conditional

你是第一个Java课程,它似乎每分钟都要走一英里。我们学习了一个主题的基础知识,并且我们被要求为更高级的程序生成代码,而不是帮助我们介绍该主题。

编写一个递归程序,它将整数作为输入。程序取数字中的每个数字并将它们全部加在一起,重复新的总和,直到结果为一位数。

您的输出应该如下所示:

###################输出示例1

输入一个数字:96374

我在计算......

步骤1:9 + 6 + 3 + 7 + 4 = 29

步骤2:2 + 9 = 11

步骤3:1 + 1 = 2

最后3个步骤的单个数字!!!!!

你的答案是2。

我理解数学java用来产生我想要的输出。在学习了递归的基础知识后,我可以做很多事情。但只是设置代码的布局和格式我就迷失了。我得到的错误很有意义,但由于缺乏经验而无法纠正。

package numout;
import java.util.Scanner;
public class NumOut {


   public static void main(String[] args) {
       System.out.print("Enter number: ");
       Scanner scan = new Scanner(System.in);
       int n = scan.nextInt(); 
       System.out.println(n);
   }
   public int sumDigit(int n){
       int sum = n % 9;
       if(sum == 0){
           if(n > 0)
               return 9;
       }
       return sum;
   }    
}

输出可以理解地复制用户输入的代码。 当我试图把它分成两部分时,我无法打电话给第二堂课。我也知道我不是很好,也不是总和。所以我试着把它变成一个,我可以明显地看到问题,但我不知道如何找到解决方案。

3 个答案:

答案 0 :(得分:3)

将递归看作是通过将其分解为更小的类似问题来解决问题。您还需要有一个案例,问题很小,解决方案很明显,或者至少很容易计算。例如,通过练习将数字的数字相加,您需要将这些数字添加到所有其他数字的总和。请注意,sum of all the other digits描述了同一问题的较小版本。在这种情况下,最小的问题是只有一个数字的问题。

这一切意味着,您需要编写一个方法sumDigits(int num),该方法采用num的个位数,并通过递归调用sumDigits()将其加到其他数字的总和上数量较少。

答案 1 :(得分:0)

这就是您需要做的事情:基本上您没有在代码中使用任何recursion。递归基本上是调用自身的函数。不要被语言吓倒,一旦你开始经常这样做,你就会很乐意解决问题。

public static void main(String []args){

    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt(); 
    printSingleDightSum(n);
 } 
 public static void printSingleDightSum(int N) {
     int sum = 0;
     int num = N;

     while(num !=0 ){
         int a = num%10;
         sum + = a;
         num = num/10;
     }
     if(sum < 10) {
         System.out.println('single digit sum is '+sum);
         return;

     } else {
         printSingleDightSum(sum);
     }
 }

答案 2 :(得分:0)

以下是代码,我稍后会添加注释和解释,但现在这里是代码:

package numout;
import java.util.Scanner;

public class NumOut {

    public static void main(String[] args) {
        System.out.println("################### output example 1");
        System.out.print("Enter number: ");
        final int n = new Scanner(System.in).nextInt(); 
        System.out.print("\nI am Calculating.....");
        sumSums(n, 1);
    }

    public static int sumSums(int n, int step) {
        System.out.print("\n\nStep " + step + " : ");
        final int num = sumDigit(n);
        System.out.print("= " + num);
        if(num > 9) {
            sumSums(num, step+1);
        }
        return num;
    }

    public static int sumDigit(int n) {

        int modulo = n % 10;

        if(n == 0) return 0;

        final int num = sumDigit(n / 10);

        if(n / 10 != 0)
            System.out.print("+ " + modulo + " ");
        else
            System.out.print(modulo + " ");

        return modulo + num;

    }

}