我对以下代码感到困惑。我不知道这些值来自哪个最终被分配给变量“temp”。不知何故,奇迹般地,2和4的值最终被分配。
执行power()方法时,y> 0,方法中唯一发生的事情是power()方法调用自身,我看不到任何可以从该方法返回值2或4的东西。
我理解代码是正确的,并且这是一个递归调用,但我试图找出,具体来说,power()方法中的哪一行代码返回那些最终被赋值的值临时变量。
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println("Value returned is: " + power(x,y));
}
public static int power (int x, int y)
{
if (y <= 0)
{
return 1;
}
else
{
int temp = power(x, y - 1);
System.out.println("Value of temp before is: " + temp);
System.out.println("Value of x is: " + x);
System.out.println("value of z before is: " + z);
z = x* temp;
System.out.println("value of z after is: " + z);
System.out.println("Value of temp after is: " + temp);
System.out.println("***********************************************");
return z;
}
}
结果如下:
Value of temp before is: 1 <==This is assigned 1 by return 1;
Value of x is: 2
value of z before is: 0
value of z after is: 2
Value of temp after is: 1
**********************************
Value of temp before is: 2 <==This is assigned by return z returning to power() method call
Value of x is: 2
value of z before is: 2
value of z after is: 4
Value of temp after is: 2
**********************************
Value of temp before is: 4 <==This is assigned by return z returning to power() method call
Value of x is: 2
value of z before is: 4
value of z after is: 8
Value of temp after is: 4
**********************************
Value returned is: 8
答案 0 :(得分:3)
power()
以2和3作为参数调用。int temp = power(x, y - 1);
调用power()
的新实例,其中2和2为参数power()
的最后一个实例,使用2和0作为参数if (y <= 0)
条件为真,因此power()
调用的此实例执行语句return 1;
。power()
实例获取该结果(1)并对其执行z = x* temp;
,结果为2.返回该值。power()
的下一个实例也是如此,将结果乘以x(2)并得到4。power()
的最终实例(第一个被调用,正在等待它发起的所有递归调用的实例)最终从递归调用中返回值4,将其乘以x(2并得到8作为最终答案。有关递归及其工作原理的更多一般信息,请参阅维基百科:https://en.wikipedia.org/wiki/Recursion
主要思想是该方法简化了问题,然后再次调用自身,直到其中一个调用进入“基本情况”。这里的基本案例是:
if (y <= 0)
{
return 1;
}
一旦基本案例得到解决,其他案例就可以根据基本案例的结果来解决。
答案 1 :(得分:1)
每次调用power
时,参数的当前值都会被推送到方法堆栈中(查找&#34;堆栈&#34;在数据结构的引用中)。您必须使用笔和纸(&#34;笔测试&#34;)或在您的脑海中使用每个不同调用的新值来跟踪执行。像这样:
x=2 y=3 temp = power(2, 2)
x=2 y=2 temp = power(2, 1)
x=2 y=1 temp = power(2, 0)
x=2 y=0 return 1
temp = 1
z = 2 * temp = 2 * 1 = 2
return 2
temp = 2
z = 2 * 2 = 4
return 4
temp = 4
z = 2 * temp = 2 * 4 = 8
return 8