Java 我不懂隐秘的方法

Java 我不懂隐秘的方法,java,methods,Java,Methods,我了解重新创建函数是如何调用的,但不知道它是如何取消的 我认为,如果在某个点y=1,函数应该返回1,因为if语句。 但事实并非如此,而且我也不明白,既然您编写了calculatePowerx,y-1;,为什么每次递归调用传入的y参数都会减少一个;。在某个点y为0,递归停止 请注意,您的功耗计算是错误的,您应该在实际递归调用之前添加一个x*:x*calculatePowerx,y-1这将在每次执行时从y中减去1 我建议您在纸上手动执行它,看看程序是如何工作的 例如:calculatepower2,

我了解重新创建函数是如何调用的,但不知道它是如何取消的

我认为,如果在某个点y=1,函数应该返回1,因为if语句。
但事实并非如此,而且我也不明白,既然您编写了calculatePowerx,y-1;,为什么每次递归调用传入的y参数都会减少一个;。在某个点y为0,递归停止


请注意,您的功耗计算是错误的,您应该在实际递归调用之前添加一个x*:x*calculatePowerx,y-1

这将在每次执行时从y中减去1

我建议您在纸上手动执行它,看看程序是如何工作的

例如:calculatepower2,3->calculatepower2,2->calculatepower2,1->calculatepower2,0。现在,由于y=0,将执行if语句并返回1

如果y是正数,函数将只返回值1

本youtube教程将为您提供递归的清晰解释:

没有比你说的更多的了。我建议您使用一支笔和一张纸手动执行该函数,跟踪当前的x和y值,并计算(比如)calculatePower5,3。此方法将始终返回1,除非y太大或太小,导致堆栈溢出错误。是的,很抱歉,我忘记了返回语句末尾的*x。我想突出显示答案的第二部分。运算代码中的错误是不理解递归的根本原因,在某个点y为0时,递归停止。嗯,关于这个。。。这里的假设是y是一个正整数,但这不是强制的。您可能想把它作为旁注添加进来,但是Java在哪里存储return的值呢?隐式地,您将使用一个变量x,并将所有值与while或for循环相乘,以…{x*=x}返回x;这些值将存储在x中,但我不理解返回值;System.out.printlnx;注意:将else条件下的代码替换为:return int x*calculatePowerx,y-1。

    public static double calculatePower (double x, int y) {
        if (y == 0) 
           return 1;
        else 
           return (int) calculatePower(x, y-1);