【问题标题】:Recursion using modular arithmetic explain java递归使用模算术解释java
【发布时间】:2017-09-23 11:03:27
【问题描述】:

谁能解释一下这个方法是如何工作的。

public static int calculate(int n){
if (n/10 == 0)
    return n;
else
    return (n % 10 + calculate(n/10));
} 

我输入 n = 15 得到 6 但我不明白该方法是如何工作的。请帮忙。谢谢。

【问题讨论】:

  • 它给sum of digits

标签: java recursion modular


【解决方案1】:

该方法计算数字的总和。

如果 n 小于 10,您只需返回 n(因为单个数字的数字总和就是数字本身)。

否则,您将最低有效数字(即n % 10)添加到数字n / 10(递归计算)的数字总和中。

【讨论】:

  • 哦...我明白了。太感谢了。我开始松了..非常感谢^_^
【解决方案2】:

它会切断最右边的数字,并与数字的其余部分一起递归移动。 (第 5 行) 如果我们只剩下一位数字(第 2 行),它也会被添加到总和中,算法结束。 (第 3 行)

【讨论】:

    【解决方案3】:

    是这样的:

    calculate(15);
    

    评估为

    15%10 + calculate(1);
    

    评估为

    5 + 1;
    

    到底是哪个;总和为 6。

    换句话说;以上是对数字中的所有数字求和的递归方法。您可以使用简单的循环轻松地重写它,以避免递归构造。

    【讨论】:

      【解决方案4】:

      对于 n = 15 ,这是它的工作原理

      15/10 > 0 ,所以执行 else 条件。

      15%10 + 计算(15/10) 即 5 + 计算(1)。

      n = 1时再次调用该方法;

      由于 1/10 == 0 ,所以返回 1

      然后将此 1 添加到 5。

      因此答案是 6。

      所以这个函数所做的就是返回组成数字的数字之和。

      【讨论】:

        【解决方案5】:

        在这个例子中,有一个 if else 条件,所以根据输入参数有 2 个条件 '

        -首先它检查 if 条件 (n/10 == 0)

        -将您的输入视为 n=15。

        • 现在它检查 (n/10 == 0)15/10==0 是否为假,因为 15/10=5 是不等于 0。

        -由于条件为假,它移动到条件返回的 else 块 (n % 10 + 计算(n/10)

        (15%10 +15/10)==5+1==6 - 所以回报是6.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-08
          • 2022-01-18
          • 2016-05-08
          • 2016-10-04
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 1970-01-01
          相关资源
          最近更新 更多