2012-02-06 70 views
1

我想使用遞歸方法,但無法正常工作。遞歸方法沒有給出正確的值

在這個程序中,例如,爲什麼當我顯示我的b時,值爲0而不是10?

public static void main(String[] args) { 
    int a = 0; 

    int b = recursivMethod(a); 
    System.out.println(b); 
} 

static int recursivMethod(int a) 
{ 
    if(a != 10) 
     recursivMethod(a+1); 

    return a; 
} 
+0

可能重複http://stackoverflow.com/questions/8849785/recursive-method – 2012-02-06 17:45:07

回答

2

兩點:

  1. 當你的方法遞歸調用自己,它忽略了返回值:

    if(a != 10) 
        recursivMethod(a+1); // <--- did you mean to do something with the result? 
    
  2. 由於recursivMethod()不會改變a,並且在返回a結束,然後撥打recursivMethod(0)將返回0。這正是您運行代碼時發生的情況。

+0

,但我有一個+ 1把它稱爲!那麼它會增加每個呼叫,不是? – Mehdi 2012-02-06 17:34:15

+1

@ user1149157:不,它不。每個調用都會獲得自己的'a'副本。 – NPE 2012-02-06 17:35:07

1

這是因爲你忽略了你的遞歸調用的返回值:

static int recursivMethod(int a) { 
    if(a != 10) 
     return recursivMethod(a+1); 
    return a; 
} 
5

的問題是,當你調用遞歸的方法,你不返回那值。也就是說,您正確呼叫recursivMethod,但立即返回初始值a。試試這個:

public static void main(String[] args) { 
    int a = 0; 

    int b = recursivMethod(a); 
    System.out.println(b); 
} 

static int recursivMethod(int a) 
{ 
    if(a != 10) 
     return recursivMethod(a+1); //here, you return the result of your recursive call 

    return a; //instead of just immediately returning a, which should only be done only after a == 10 
} 
1

嘗試

return recursiveMethod(a+1); 

代替

0
static int recursivMethod(int a) 
{ 
if(a != 10) 
    return recursivMethod(a+1); 


} 
1

你也永遠不會分配一個新值方法的局部變量a
嘗試:

public static void main(String[] args) { 
    int a = 0; 

    int b = recursivMethod(a); 
    System.out.println(b); 
} 

static int recursivMethod(int a) 
{ 
    if(a != 10) 
    a = recursivMethod(a+1); 

    return a; 
} 
1

你放棄你的遞歸調用的結果。

static int recursivMethod(int a) 
{ 
    if(a != 10) 
     return recursivMethod(a+1); // Note the return 

    return a; 
} 
0

缺少返回:

return recursivMethod(a+1);