Java 如何编写递归方法来返回整数中的数字和?
到目前为止,这是我的代码Java 如何编写递归方法来返回整数中的数字和?,java,recursion,Java,Recursion,到目前为止,这是我的代码 public int getsum (int n){ int num = 23456; int total = 0; while (num != 0) { total += num % 10; num /= 10; } } 问题是我不知道如何把它变成递归方法 我对递归有点陌生,我需要一些帮助来实现这个方法,将其更改为递归的。在这里 //su
public int getsum (int n){
int num = 23456;
int total = 0;
while (num != 0) {
total += num % 10;
num /= 10;
}
}
问题是我不知道如何把它变成递归方法
我对递归有点陌生,我需要一些帮助来实现这个方法,将其更改为递归的。在这里
//sumDigits function
int sumDigits(int n, int sum) {
// Basic Case to stop the recursion
if (n== 0) {
return sum;
} else {
sum = sum + n % 10; //recursive variable to keep the digits sum
n= n/10;
return sumDigits(n, sum); //returning sum to print it.
}
}
正在运行的函数示例:
public static void main(String[] args) {
int sum = sumDigits(121212, 0);
System.out.println(sum);
}
试试这个:
int getSum(int num)
{
total = total + num % 10;
num = num/10;
if(num == 0)
{
return total;
} else {
return getSum(num);
}
}
简短、递归并执行以下操作:
int getsum(int n) {
return n == 0 ? 0 : n % 10 + getsum(n/10);
}
这适用于正数
public int sumDigits(int n) {
int sum = 0;
if(n == 0){
return 0;
}
sum += n % 10; //add the sum
n /= 10; //keep cutting
return sum + sumDigits(n); //append sum to recursive call
}
#包括
intuserecursion(intx);
使用名称空间std;
int main(){
int n;
coutn;
库特
}我认为这是迄今为止最短的。不过,输入的东西也取决于你
public static int getSum(int input) { //example: input=246
int sum=0;
if (input%10==input) { //246%10=6;
return input%10; //2%10=2
}
return input%10+getSum((input-input%10)/10); //(246-6)/10=24; 24%10=4
}
我在这里看到了很多解决方案,但没有一个像下面这样简单。我对它进行了无数次测试,结果都没有问题:
public int sumDigits(int n) {
if (n == 0){
return 0;
}
else{
return n%10 + sumDigits(n/10);
}
}
要开始使用递归方法,必须定义:1。基本情况(本例中的num!=0),2。需要多次执行的代码部分,3。您的输入参数,4。您的输出。尝试一下,用你建议的解决方案编辑你的问题,这样我们可以更好地帮助你。看看你的个人资料,你似乎有很多与递归相关的问题。为什么不买一本好的编程书,从试错开始学习呢?+1表示尾部递归。较短的版本:int-sumdights(int-n,int-sum){return(n==0)?0:n%10+sumdights(n/10,sum+n%10);}这是一个只包含代码的答案,没有注释。请提供您更改的内容和更改原因的解释。请在您的回答中添加一些解释,以帮助提问者理解问题。请与您的回答一起详细解释此方法不是递归的!是的,但是更快、更短……而且不正确。sumDigits(99)=>98%9+1=>8+1=>9…是的,这是正确答案。最初的问题是计算数字之和直到一位数。所以对于99:9+9=18=>1+8=9,可以在这里找到原因-。我猜你没有“看到”。。。你的也做了同样的事情,只是用了更详细的方式。
#include <iostream>
int useRecursion(int x);
using namespace std;
int main(){
int n;
cout<<"enter an integer: ";
cin>>n;
cout<<useRecursion(n)<<endl;
return 0;
}
int useRecursion(int x){
if(x/10 == 0)
return x;
else
return useRecursion(x/10) + useRecursion(x%10);
}
import java.util.Scanner;
public class Adder {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter a number: ");
System.out.println();
int number = input.nextInt();
System.out.println("The sum of the digits is " +adder(number));
}
public static int adder(int num){
int length = String.valueOf(num).length();
int first , last , sum;
if (length==1){
return num;
}
else
{
first = num /10;
last = num % 10;
sum = last + adder(first);
}
return sum;
}
}
public static int sumOfDigit(int num){
int sum=0;
if (num == 0)
return sum;
sum = num%10 + sumOfDigit(num/10);
return sum;
}
public static void main(String args[]) {
Scanner input=new Scanner(System.in);
System.out.print("Input num : ");
int num=input.nextInt();
int s=sumOfDigit(num);
System.out.println("Sum = "+s);
}
public static int getSum(int input) { //example: input=246
int sum=0;
if (input%10==input) { //246%10=6;
return input%10; //2%10=2
}
return input%10+getSum((input-input%10)/10); //(246-6)/10=24; 24%10=4
}
public int sumDigits(int n) {
return (n - 1) % 9 + 1;
}
public int sumDigits(int n) {
if (n == 0){
return 0;
}
else{
return n%10 + sumDigits(n/10);
}
}