2014-03-29 141 views
0

我遇到了遞歸問題。目前,這段代碼給了我一個錯誤信息「缺少返回語句」。任何方式讓我按照我想要的方式工作?我希望它計算爲x n,然後當n達到零時返回「計數」。Java:「缺少返回語句」

public class Question6p2 { 
    public static void main(String[] args){ 
     int n = -6; 
     int x = 2; 
     int count = x; 
     power2(n, x, count); 
     System.out.println(power2(n, x, count)); 

    } 

    public static int power2(int n, int x, int count){ 
     if (n != 0){ 
      if (n>0){ 
       count = count * x; 
       n = n - 1; 
      } 
      else if (n<0) { 
       count = count * -x; 
       n = n + 1; 
      } 
      power2(n, x, count); 
     } 
     else if (n == 0){ 
      return count; 
     } 
    } 
} 

也許我來了這一切都是錯誤的。任何人都在意幫忙嗎?

+1

當'n'不爲零時,您需要返回_something_。 –

+0

我不明白你想做什麼。 你想計算x pow n? (什麼是計數) –

+0

@AnthonyRaymond我使用count來存儲x的n次方。 –

回答

1

有幾件事情錯了你的算法:

是什麼意思有一個負指數?

你應該明白,X -n可以寫成1/X ñ。這不是你的算法所反映的。

所有可能的情況

有4個基本的情況下計算指數時。

  • 有任何值x = 1。
  • 任意x = X
  • 任何負指數x -n = 1/X Ñ
  • 任何正指數大於一:X Ñ其中n> 1

當x的指數爲零時,您的算法應返回1。當指數爲1時返回x或在n> 1時遞歸調用算法。

在特殊情況下,其中n < 0(即,您有一個負指數)您可以簡單地返回倒數1 /方法因爲您在調用方法之前更改了n的符號。

行:

else if (n < 0){ 
    n = -n; 
    return(1/power2(n, x, count)); 
} 

檢查爲負指數,並返回1/X ñ必須注意的n符號改變了這裏,現在這個工作時就像正指數的任何其他方法調用。

public class TestCode { 
    public static void main(String[] args){ 
     int n = 4; 
     int x = 5; 
     double count = x; 
     System.out.println(power2(n, x, count)); 

    } 

    public static double power2(int n, int x, double count){ 
     if (n == 0) 
      return 1; 
     else{ 
      if (n > 1){ 
       count = count * x; 
       n = n - 1; 
      } 
      else if (n < 0){ 
       n = -n; 
       return(1/power2(n, x, count)); 
      } 
      else if (n == 1) { 
       return count; 

      } 
      return power2(n, x, count); 
     } 
    } 
} 
+0

很好的解釋!非常感謝!這真是讓我難過。 –

3

目前,你有這樣的語句:

power2(n, x, count); 

...這完全忽略了結果。在那個分支中,我們永遠不會從方法調用中返回任何東西。我懷疑這兩個問題是相關的。

懷疑你只是想:

return power2(n, x, count); 
2

目前,因爲您的return語句是一個if語句中,所以如果if語句不運行你得到關於沒有return語句錯誤你不會返回任何問題。

此外,我認爲你是從事遞歸從根本上錯誤,因爲你永遠不會回調你的方法遞歸。

你可能想要在你的權力方法中做的是接受n作爲調用你的方法的時間,然後每次遞歸降低1。然後在每次遞歸時乘以原始值x。

這裏是我的意思是:

public static double power2(int n, int x,int xOriginal){ 
    if(n == 0){ 
     return 1; 
    } 
    if(n < 0){ 
     return 1/power2(n*-1, x, x); 
    } 
    if(n <= 1){ 
     return x; 
    } 
    return power2(n -1, x * xOriginal, xOriginal); 
} 

編輯:負ñ現在的作品。

+0

但是,如果n是正數,那並不是真的有效。 –

+0

只有當n是正數時它才應該起作用。 –

+0

當n也是負數時,我需要它工作。 –