递归实现列表元素的q的乘幂

时间:2019-05-31 06:57:09

标签: java list recursion nodes abstract-class

我需要编写一个程序,该程序可以计算从 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

我无法使用标准库的方法

1 个答案:

答案 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) ;
     }
}