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