2017-04-02 72 views
2

我有兩種遞歸方法。其中之一有一個特殊的公式,我必須使用第二種方法。我的任務是編寫一個名爲reportOnValues的遞歸方法,該方法將使用列表中的每個值來計算在方法 specialRecursiveFunction中實現的遞歸公式。我目前在執行我的reportValues方法時遇到了麻煩。我怎麼能做到這一點。用另一種方法實現的遞歸公式方法

1日法

public static void reportOnValues(MyListOfInts m){ 
    if (m == null) return; 
    else 
     return specialRecursiveFunction(m.firstInt) + reportOnValues(m.restOfTheInts); 
} 

第2種方法

public static double specialRecursiveFunction(int x){ 
    if (x == 1) return 0; 
    else if (x%2==1) 
     return 1 + specialRecursiveFunction(x-1); 
    else 
     return 1 + specialRecursiveFunction(x/2); 

} 

構建鏈表

public class MyListOfInts { 

public int firstInt; // contain data 
public MyListOfInts restOfTheInts; // points to next node 

public MyListOfInts(int f){ // constructor 1 
    firstInt=f; 
} 

public MyListOfInts(int f, MyListOfInts r){ // constructor 2 implements nodes and data 
    firstInt=f; 
    restOfTheInts=r; 
} 

}

+0

很難告訴你你正在嘗試做什麼。爲什麼你將'reportOnValues'聲明爲'void',但是試圖從中返回一個值? – Lucero

+0

你在執行代碼時有什麼問題,我想給出的代碼除了lucero提到的代碼之外還能正常工作 – monster

+0

我在猜測'reportOnValues'應該返回一個'double'?請澄清這一點。 –

回答

1

我做你的代碼的一些變化。我認爲這是你在尋找什麼

/* 
    * I changed the return type to double. 
    * And if (x == 1) return; To if (x == 1) return 0; 
    */ 
    public static double specialRecursiveFunction(int x){ 
     if (x == 1) return 0; 
     else if (x%2==1) 
      return 1 + specialRecursiveFunction(x-1); 
     else 
      return 1 + specialRecursiveFunction(x/2); 
    } 

    public static double reportOnValues(MyListOfInts m){ 
     if (m == null) return 0; 
     else 
      return specialRecursiveFunction(m.firstInt) + reportOnValues(m.restOfTheInts); 
    } 

MyListOfInts

/* 
    * I Added restOfTheInts = null; in MyListOfInts Method 
    */ 
    public class MyListOfInts { 

     public int firstInt; // contain data 
     public MyListOfInts restOfTheInts; // points to next node 

     public MyListOfInts(int f){ // constructor 1 
      firstInt=f; 
      restOfTheInts = null; 
     } 

     public MyListOfInts(int f, MyListOfInts r){ // constructor 2 implements nodes and data 
      firstInt=f; 
      restOfTheInts=r; 
     } 
    } 

,這是我如何測試它

public static void main(String[] args) { 
     MyListOfInts list1 = new MyListOfInts(5, new MyListOfInts(13, new MyListOfInts(18, new MyListOfInts(4, new MyListOfInts(36, new MyListOfInts(5)))))); 
     System.out.println(reportOnValues(list1)); 

    } 

我希望這是你的廁所國王,如果不是我可以幫助通過告訴你達到你的目標。

+0

是的,這就是我一直在尋找的東西。 – Alan

+0

如果是這樣,您可以批准答案作爲正確的答案。 –