我需要编写一个程序,该程序可以计算从 i = 0 乘以 i q 节点列表的strong>元素
该方法必须具有此签名
public double eval (double q)
它是抽象类 List
的抽象方法abstract class List{
abstract double eval(double q);
}
由
实现class Nil extends List{
public double eval(double q){
//Method to implement
}
}
class Cons extends List{
int elem;
List next;
public Cons(int elem, List next){
this.elem = elem;
this.next = next;
}
public double eval(double q){
//Method to implements
}
}
我试图自己实施 这是我尝试的缺点:
public double eval(double q){
return elem * q + next.eval(q*q);
}
无的地方:
public double eval(double q){
return 0;
}
通过这种方式,我可以为索引 i 上的列表元素计算 q ^ i 的幂,但是我无法将返回值加到 q ^ 0 的第一个元素的结果。如何在不添加 q 之外的任何其他参数的情况下实现此行为?
示例
Input: inputList = [1,2,3]
method: inputList.eval(5)
output: 1 * 5^0 + 2 * 5^1 + 3 * 5^2 = 1 + 10 + 75 = 86
我无法使用标准库的方法
答案 0 :(得分:0)
发布的代码不是mcve,因此需要一些猜测。
以下是演示如何递归计算的mcve:
1 * 5 ^ 0 + 2 * 5 ^ 1 + 3 * 5 ^ 2 = 1 + 10 + 75 = 86
import java.util.Arrays;
import java.util.List;
public final class Main {
public static void main(final String[] args) {
Cons cons = new Cons(Arrays.asList(1,2,3));
System.out.println(cons.eval(5));
}
}
class Cons{
private List<Integer> list;
Cons(List<Integer> list){
this.list = list;
}
public double eval(double q){
int length = list.size();
if(length == 0) return 0.;
int lastElement = list.get(length-1);
list = list.subList(0, lastElement-1);
return lastElement * Math.pow(q,length-1) + eval(q) ;
}
}