public class NuVizzDemo {
public static void main(String args[]){
int x=6;
System.out.println("initial value of x is "+x);
int y=getX(x);
System.out.println("value of x after method is executed is "+x);
System.out.println("value of y is "+y);
}
private static int getX(int x) {
// TODO Auto-generated method stub
if(x==1){
System.out.println("value of X is "+x);
return 0;
}
else
System.out.println("value of x is "+x);
return 1+getX(x-1);
}
}
我想知道y
的价值如何1
小于x
?
答案 0 :(得分:7)
因为函数getX
是recursive并且遵循以下模式:
x = 1: 0
x = 2: 1 + getX(1) = 1 + 0 = 1
x = 3: 1 + getX(2) = 1 + 1 + getX(1) = 1 + 1 + 0 = 2
...
修改:您应该为getX
添加一个条款,使x <= 0
更加健壮。对于x
这样的值,您的代码将抛出StackOverflowError
(对于Stack Overflow上发布的问题,这是一件好事™)。
答案 1 :(得分:1)
因为
return 1+getX(x-1);
将为您提供值1 + 1 + 1 + 1 + 1 + 0 = 5
,因为当x
到达1
时,您显然正在返回0
。
答案 2 :(得分:0)
因此,此递归调用将进行5次,并且在第5次返回值将为0,因为它将在x == 1
时返回0。
所以当:
x = 1 -> 0
x = 2 -> 0 + 1 = 1
x = 3 -> 1 + 1 + getX(1) = 2
x = 4 -> 1 + 1 + 1 + getX(1) = 3
x = 5 -> 1 + 1 + 1 + 1 + getX(1) = 4
x = 6 -> 1 + 1 + 1 + 1 + 1 + getX(1) = 5
所以它的y = 5.