结果如何在递归中产生?

时间:2015-02-19 09:25:26

标签: java recursion

第一个代码: a = 5

    if (a==0)
        return 1;

    return a * xample(a-1);

我的追踪:

5 == 0 FALSE 跳过返回1 返回5 * xample(5-1) 所以,a = 4

回到方法内部 4 == 0 FALSE 跳过返回1 返回5 * xample(4-1) 所以,a = 3

回到方法内部 3 == 0 FALSE 跳过返回1 返回5 * xample(3-1) 所以,a = 2

回到方法内部 2 == 0否 跳过返回1 返回5 * xample(2-1) 所以,a = 1

回到方法内部 1 == 0否 跳过返回1 返回5 * xample(1-1) 所以,a = 0

回到方法内部 0 == 0 TRUE 返回1

所以最后一个值是1,真正的最后一个值是怎么来的?

第二代码: a = 5

    if (a<1)
        return 1;
    else
        return a + xample(a/5);

为什么答案是7?

第三代码: a = 5

    a--;
    if (a>0)
    {
        xample(a);
    }
    return a;

为什么答案是4 ???

1 个答案:

答案 0 :(得分:3)

在以下代码中:

if (a==0)
    return 1;

return a * xample(a-1);

如果a是5:

return 5 * xample (5 - 1) = 
       5 * 4 * xample (4 - 1) =
       5 * 4 * 3 * xample (3 - 1) =
       5 * 4 * 3 * 2 * xample (2 - 1) =
       5 * 4 * 3 * 2 * 1 * xample (1 - 1) =
       5 * 4 * 3 * 2 * 1 * 1 = 120