【问题标题】:Natural Numbers Sum of Digits using recursion使用递归的自然数数字总和
【发布时间】:2013-10-16 19:02:21
【问题描述】:

我正在尝试实现一个函数,该函数返回一个自然数,该自然数是输入的自然数内的数字之和。我只是不断地陷入无限循环。我知道我必须返回递归调用,但我无法弄清楚。这是我目前所拥有的:

private static NaturalNumber sumOfDigits(NaturalNumber n) {
        NaturalNumber zero = new NaturalNumber2(0);
        if (n.compareTo(zero) == 0) {
            return zero;
        } else {
            NaturalNumber z = new NaturalNumber2(n.divideBy10());
            n.divideBy10();
            z.add(sumOfDigits(n));

         // return ___;

        }
    }

我应该返回什么?返回 z 不起作用

【问题讨论】:

  • 你需要 NaturalNumber 类做什么?
  • 我们今天只是像topsy一样递归,不是吗?我建议您查看过去 24 小时内开始讨论基本递归的 4-5 个其他线程之一——同样的原则也适用。
  • @Cruncher - 它让它变得更加复杂。
  • @HotLicks divideBy10 是我最喜欢的新方法
  • @HotLicks 我已经审查了它,我已经实现了这个返回和 int 而不是 NN 并且它可以工作。我只是想弄清楚如何返回 z.add(sumOfDigits(n)); 但它给了我一个 void 错误

标签: java recursion


【解决方案1】:

您正在使用 n 进行递归调用,与传递到您的过程中的数字相同。如果你去掉 z 的一个数字,那么递归调用必须用剩下的数字进行。

你可以用 mod 10 去掉一个数字,然后除以 10 得到其余的数字。如果你使用的是整数,那就是:

return (n % 10) + sumOfDigits(n / 10);

【讨论】:

  • 这正是我为 int 创建它时的样子。在这里我必须返回一个 NaturalNumber,它不允许我返回 z.add(sumOfDigits(n));
  • z.add 返回什么?它是返回 add 的结果还是改变 z 的状态并返回 void?
【解决方案2】:

z.add(sumOfDigits(n)); 应该是 z.add(sumOfDigits(n.divideBy10()));。要点是在递归中,您只想处理答案的其余部分,而不是整个问题。

【讨论】:

  • n.divideBy10() 给了我需要添加的数字。如果递归只有一个数字,它将除以 10。这不是我想要的
  • @WestonBuckeye 是吗? 5463/10 是什么?不是53。我想你正在寻找n % 10
  • @Cruncher 好的,我解决了这个问题,但我需要返回什么?
  • @Cruncher 如果我输入 223456。我在顶部的 NN z 等于 6。n.divideBy10() 会返回一个余数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2017-06-06
  • 2013-09-02
  • 2015-08-30
  • 2021-07-27
  • 2020-03-19
  • 2022-01-14
相关资源
最近更新 更多