帮助理解数学递归方法

时间:2011-04-24 06:18:32

标签: java recursion

我遇到了浏览网页搜索递归方法的方法。 相信我,我无法得到它的逻辑。基本上,此方法查找给定数量的密码数量。

public int aantalCijfers(int n)
{
    if (n < 10)
    {
        return 1;
    }
    else if ((n > 9) && (n < 100))
    {
        return 2;
    }
    else
    {
        return (aantalCijfers(n / 100) + 2);
    }
}

我们举个例子。让我们假设我们使用5000作为参数,我的结论将如下所示:

  1. 5000
  2. 52
  3. 2(由于52之后的else-if语句返回9&amp; 100之间)
  4. 但相反,它返回4,它工作正常,而我期待它不会。 请问,如果你弄清楚它是如何工作的,请指出这个方法如何得出正确结论的步骤?

4 个答案:

答案 0 :(得分:5)

不确定。 :-)但首先请注意,该功能显示aantalCijfers(n/100) + 2不是 aantalCijfers(n/100 + 2)。我有一种感觉,你可能误解了这一点。

基本情况是1或2位数。除此之外,除以100(因此剥去两位数),重新计算,并在结果中加2。

以5000为例:

  1. digits(5000)
  2. digits(50) + 2
  3. 2 + 2
  4. 4
  5. 您可以进一步扩展。比如说,使用1000000。

    1. digits(1000000)
    2. digits(10000) + 2
    3. digits(100) + 2 + 2
    4. digits(1) + 2 + 2 + 2
    5. 1 + 2 + 2 + 2
    6. 7

答案 1 :(得分:1)

非常简单

  • 最多一百(且大于9)的数字有2位数。
  • 因此除以100会使您的点数增加2位数。
  • 你再次调用该函数并检查余数,然后继续进行直到其中一个退出条件,最多10或10到99

答案 2 :(得分:1)

实施例

 aantalCijfers(5000)

 returns (aantalCijfers(50) which returns 2) + 2 = 4

答案 3 :(得分:1)

第二步你错了,它是f(50)+2,而不是50 + 2。 而f(50)是第二个if,返回2,所以它是2 + 2,产生4。