将值传递给方法然后打印它

时间:2015-01-30 10:06:11

标签: java

我在接受采访时遇到了这个问题。

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

3 个答案:

答案 0 :(得分:7)

因为函数getXrecursive并且遵循以下模式:

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.