2017-04-02 18 views
2

私は2つの再帰的メソッドを持っています。それらのうちの1つには、第2の方法で使用する必要がある特別な数式があります。私の仕事は、 の各値を使用して、 specialRecursiveFunctionメソッドで実装された再帰式を計算するreportOnValuesという名前の再帰メソッドを作成することです。私は現在、reportValuesメソッドへの式の実装に問題があります。どのように私はこれを達成することができます。別のメソッドで実装された再帰式メソッド

第一の方法

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

第二の方法

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 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; 
     } 
    } 

/* 
    * 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を探して何だと思い、これは私が、私はことを願っています

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

これが正しい場合は、正しい回答として回答を承認することができます。 –

関連する問題