在另一个方法上实现的递归公式方法

时间:2017-04-02 16:43:58

标签: java recursion linked-list

我有两种递归方法。其中一个有一个特殊的公式,我必须在第二个方法上使用。我的任务是编写一个名为reportOnValues的递归方法,该方法将使用每个值  用于计算方法中实现的递归公式的列表  specialRecursiveFunction。我目前无法在我的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;
}

}

1 个答案:

答案 0 :(得分: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 Class

    /*
     * 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));

    }

我希望这就是你要找的东西,如果不是我可以通过告诉你实现目标来帮助你。