英文:
I do not understand recrusive methods
问题
public static double calculatePower(double x, int y) {
if (y == 0)
return 1;
else
return (int) calculatePower(x, y-1);
我理解递归函数是如何被调用的,但是不理解它是如何被终止的。
我认为,如果在某一点上 y=1
,由于 if
语句,函数应该返回 1
。
但实际上它没有这样做,我不明白为什么。
英文:
public static double calculatePower (double x, int y) {
if (y == 0)
return 1;
else
return (int) calculatePower(x, y-1);
I understand how the recrusive function is called, but not how it is cancelled.
I think, if at some point y=1
the function should return 1
because of the if
statement.
But it does not and I do not understand why
答案1
得分: 5
对于每次递归调用,传入的 y
参数都会减少一,因为你写了 calculatePower(x, y-1);
。在某一点上,y
会变成 0
,递归就会停止。
请注意,你的乘幂计算是错误的,你应该在实际的递归调用前添加 x *
:x * calculatePower(x, y-1)
。
英文:
For every recursive invocation the incoming y
parameter is reduced by one since you write calculatePower(x, y-1);
. At some point y
is 0
and the recursion stops.
Note that your power calculation is wrong , you should add a x *
before the actual recursive call: x * calculatePower(x, y-1)
答案2
得分: 3
这将在每次执行时从 y 减去 1。
我建议您在纸上手动执行它,以查看程序的工作原理。
例如:calculatepower(2,3) -> calculatepower(2,2) -> calculatepower(2,1) -> calculatepower(2,0)。现在,由于 y = 0,if 语句将被执行,它将返回 1。
然而,您的函数只会返回值 1(如果 y 是正数的话)。
这个 YouTube 教程会为您清晰地解释递归:
https://www.youtube.com/watch?v=neuDuf_i8Sg
英文:
This will subtract 1 from y every time it gets executed.
I recommend you execute it manually on paper to see how the program works.
ex: calculatepower(2,3) -> calculatepower(2,2) -> calculatepower(2,1) -> calculatepower(2,0). Now since y = 0 the if statement will get executed and it will return 1
Your function will only return the value 1 though (if y was a positive number)
This youtube tutorial will give you a clear explanation for recursion:
https://www.youtube.com/watch?v=neuDuf_i8Sg
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论