我正在尝试用 Java 做一个问题,其中涉及获取一个 Lisp 列表和一个整数,并将列表中的所有项目乘以该整数,但它必须使用递归。这是我的代码:
public static LispList<Integer> multipy(LispList<Integer> ls, int m){
LispList<Integer> ls1 = LispList.empty();
if(ls.isEmpty()){
return ls1;
}else{
ls1.cons(ls.head() * b);
}
return multipy(ls1, m)
}
我的想法是首先创建一个空列表,ls1。然后,我使用一个基本情况,检查原始列表 - ls - 是否为空,如果是,则返回新列表 ls1。如果它不为空,我会将所有项目乘以整数并将其传递给 ls1。然后我在最后再次调用该方法。
但是我的问题是这不起作用,因为它每次都会创建一个新的列表 ls1,从而破坏已经创建的列表。我考虑过将 ls1 传递到递归调用中,但这不起作用,因为它在 ls1 上运行,而不是按要求运行 ls 。有没有办法解决这个问题,或者我必须使用迭代方法来做到这一点?
最佳答案
multiply(ls.tail(),m)
获取一个列表,其中包含 ls
尾部相乘的所有值。对于该列表,您只需添加 ls
的头部相乘,这似乎是使用 cons()
方法完成的。所以,它会是这样的:
public static LispList<Integer> multipy(LispList<Integer> ls, int m){
// No point making the else case if your
// last statement of the block is a return
if(ls.isEmpty()) return LispList.empty();
return multiply(ls.tail(),m).cons(ls.head()*m);
}
我假设您的 LispList
有一个 tail()
方法。
关于java - 递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47000990/