通过递归的数字总和
sum of Digits through Recursion
我正在尝试制作一个递归函数,它应该 return 数字的总和。该函数应该只有一个参数。到目前为止我有这个;
public int sumDigits(int n) {
if(n%10 == n) // last digit remains
return n;
else{
int rightdigit;
rightdigit = n%10; // taking out the right most digit
return rightdigit + (n/10); // adding it to everything on left
}
}
该函数适用于某些值,特别是 2 位数字。但是它给出了一些数字非常奇怪的值,比如 730,当它应该是 10 时结果是 73。
我已经在纸上解决了,但无法弄清楚我哪里出错了。任何帮助将不胜感激。
你的方法不是递归的。它应该在最后一部分调用自己:
return rightdigit + sumDigits(n / 10);
这会将最右边的数字添加到最左边数字的递归求和数中。
您忘记给 sumDigits()
打电话了。
更改此行:
return rightdigit + (n / 10);
对此:
return rightdigit + sumDigits(n / 10);
你实际上并不是递归。您已经设置了基本情况,但是在递归解决问题时,您应该在 调用函数本身的函数中包含代码 。
所以你错过了 调用 sumDigits
的一行,参数更小。
考虑递归解决方案的两个重要部分:
- 基本情况。这是递归的结束,此时你的递归将开始return,在你的情况下创建一个总和。
- 递归:您的递归函数将使用不同的参数调用自身,通常是问题的一小部分。
请注意,您的问题非常适合这个问题:您在 if/else 中有 2 个案例。你的基本案例设置得很好,现在在另一个分支中你会想要实际递归。您应该很清楚在哪里调用 sumDigits
.
我正在尝试制作一个递归函数,它应该 return 数字的总和。该函数应该只有一个参数。到目前为止我有这个;
public int sumDigits(int n) {
if(n%10 == n) // last digit remains
return n;
else{
int rightdigit;
rightdigit = n%10; // taking out the right most digit
return rightdigit + (n/10); // adding it to everything on left
}
}
该函数适用于某些值,特别是 2 位数字。但是它给出了一些数字非常奇怪的值,比如 730,当它应该是 10 时结果是 73。
我已经在纸上解决了,但无法弄清楚我哪里出错了。任何帮助将不胜感激。
你的方法不是递归的。它应该在最后一部分调用自己:
return rightdigit + sumDigits(n / 10);
这会将最右边的数字添加到最左边数字的递归求和数中。
您忘记给 sumDigits()
打电话了。
更改此行:
return rightdigit + (n / 10);
对此:
return rightdigit + sumDigits(n / 10);
你实际上并不是递归。您已经设置了基本情况,但是在递归解决问题时,您应该在 调用函数本身的函数中包含代码 。
所以你错过了 调用 sumDigits
的一行,参数更小。
考虑递归解决方案的两个重要部分:
- 基本情况。这是递归的结束,此时你的递归将开始return,在你的情况下创建一个总和。
- 递归:您的递归函数将使用不同的参数调用自身,通常是问题的一小部分。
请注意,您的问题非常适合这个问题:您在 if/else 中有 2 个案例。你的基本案例设置得很好,现在在另一个分支中你会想要实际递归。您应该很清楚在哪里调用 sumDigits
.