Java 结果如何在递归中产生?

Java 结果如何在递归中产生?,java,recursion,Java,Recursion,第一个代码:a=5 if (a==0) return 1; return a * xample(a-1); if (a<1) return 1; else return a + xample(a/5); a--; if (a>0) { xample(a); } return a; 我的追踪: 5==0假 跳过返回1 返回5*示例(5-1) 所

第一个代码:a=5

    if (a==0)
        return 1;

    return a * xample(a-1);
    if (a<1)
        return 1;
    else
        return a + xample(a/5);
    a--;
    if (a>0)
    {
        xample(a);
    }
    return a;
我的追踪:

5==0假 跳过返回1 返回5*示例(5-1) 所以,a=4

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

回到方法内部 3==0假 跳过返回1 返回5*示例(3-1) a=2

回到方法内部 2==0假 跳过返回1 返回5*示例(2-1) a=1

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

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

那么最后一个值是1,为什么实际的最后一个值是120

第二个代码:a=5

    if (a==0)
        return 1;

    return a * xample(a-1);
    if (a<1)
        return 1;
    else
        return a + xample(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

在以下代码中:

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

在以下代码中:

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

在以下代码中:

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


启动调试器,单步浏览示例,观察“调用堆栈”显示。到目前为止,这是了解其工作原理的最佳方式。相比之下,文本描述往往非常薄弱。哪些部分不清楚?使用调试器观察运行代码时发生的情况。如果您没有或不知道如何使用调试器,请停止正在进行的工作并获取调试器/学习使用调试器的基本知识。使用调试器是编程的一个基本部分,包括学习编程。等等:你是说你不愿意花几分钟去做最好的事情来理解递归?恕我直言,但这似乎是一种奇怪的学习方法。启动调试器,单步浏览示例,观看“调用堆栈”显示。到目前为止,这是了解其工作原理的最佳方式。相比之下,文本描述往往非常薄弱。哪些部分不清楚?使用调试器观察运行代码时发生的情况。如果您没有或不知道如何使用调试器,请停止正在进行的工作并获取调试器/学习使用调试器的基本知识。使用调试器是编程的一个基本部分,包括学习编程。等等:你是说你不愿意花几分钟去做最好的事情来理解递归?恕我直言,但这似乎是一种奇怪的学习方法。启动调试器,单步浏览示例,观看“调用堆栈”显示。到目前为止,这是了解其工作原理的最佳方式。相比之下,文本描述往往非常薄弱。哪些部分不清楚?使用调试器观察运行代码时发生的情况。如果您没有或不知道如何使用调试器,请停止正在进行的工作并获取调试器/学习使用调试器的基本知识。使用调试器是编程的一个基本部分,包括学习编程。等等:你是说你不愿意花几分钟去做最好的事情来理解递归?恕我直言,但这似乎是一种奇怪的学习方法。启动调试器,单步浏览示例,观看“调用堆栈”显示。到目前为止,这是了解其工作原理的最佳方式。相比之下,文本描述往往非常薄弱。哪些部分不清楚?使用调试器观察运行代码时发生的情况。如果您没有或不知道如何使用调试器,请停止正在进行的工作并获取调试器/学习使用调试器的基本知识。使用调试器是编程的一个基本部分,包括学习编程。等等:你是说你不愿意花几分钟去做最好的事情来理解递归?值得尊重,但这似乎是一种奇怪的学习方式。太好了!!!!我现在理解了第一个代码的过程。。。。所以这只意味着当再次调用该方法时,a的值将改变!!!我想它会一直保持到5!!!伟大的我必须理解其他代码!!!谢谢……但是等等。。。。。。为什么是5*4*3*2*1*1???它应该是5*4*3*2*1*0。。。。。因为1-1是0…@Rae
if(a==0)返回1顺便说一下,我不明白第三个代码是如何工作的。。。。为什么当1-1=0时它会上升到4?@Rae最后一个代码忽略递归调用的输出,因此您可以用这个等效代码替换它:
a--;返回a太棒了!!!!我现在理解了第一个代码的过程。。。。所以这只意味着当再次调用该方法时,a的值将改变!!!我想它会一直保持到5!!!伟大的我必须理解其他代码!!!谢谢……但是等等。。。。。。为什么是5*4*3*2*1*1???它应该是5*4*3*2*1*0。。。。。因为1-1是0…@Rae
if(a==0)返回1顺便说一下,我不明白第三个代码是如何工作的。。。。为什么当1-1=0时它会上升到4?@Rae最后一个代码忽略递归调用的输出,因此您可以用这个等效代码替换它:
a--;返回a太棒了!!!!我现在理解了第一个代码的过程。。。。所以这只意味着当再次调用该方法时,a的值将改变!!!我想它会一直保持到5!!!伟大的我必须理解其他代码!!!谢谢……但是等等。。。。。。为什么是5*4*3*2*1*1???它应该是5*4*3*2*1*0。。。。。因为1-1是0…@Rae
if(a==0)返回1顺便说一下,我不明白第三个代码是如何工作的。。。。为什么当1-1=0时它会上升到4?@Rae最后一个代码忽略递归调用的输出,因此您可以用这个等效代码替换它:
a--;返回a太棒了!!!!我现在理解了第一个代码的过程。。。。所以这只意味着当再次调用该方法时,a的值将改变!!!我想它会一直保持到5!!!伟大的我必须理解其他代码!!!谢谢……但是等等。。。。。。为什么是5*4*3*2*1*1???它应该是5*4*3*2*1*0。。。。。因为1-1是0…@Rae
if(a==0)返回1顺便说一下,我不明白第三个代码是如何工作的。。。。当1-1=0时,为什么它会上升到4?@Rae最后一个代码忽略递归调用的输出,因此可以用t替换它