递归的结果是如何产生的?

How is the result produce in a recursion?

第一个代码:a = 5

    if (a==0)
        return 1;

    return a * xample(a-1);

我的跟踪:

5==0 错误 跳过 return 1 return 5 * 示例 (5-1) 所以,a = 4

返回方法内部 4==0 错误 跳过 return 1 return 5 * 示例 (4-1) 所以,a = 3

返回方法内部 3==0 错误 跳过 return 1 return 5 * 示例 (3-1) 所以,a = 2

返回方法内部 2==0 错误 跳过 return 1 return 5 * 示例 (2-1) 所以,a = 1

返回方法内部 1==0 假 跳过 return 1 return 5 * 示例 (1-1) 所以,a = 0

返回方法内部 0==0 真 return 1

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

第二个代码: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???

在以下代码中:

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