我有两种递归方法。其中一个有一个特殊的公式,我必须在第二个方法上使用。我的任务是编写一个名为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;
}
}
答案 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));
}
我希望这就是你要找的东西,如果不是我可以通过告诉你实现目标来帮助你。