gpt4 book ai didi

java - 递归问题

转载 作者:行者123 更新时间:2023-12-02 12:04:29 26 4
gpt4 key购买 nike

我正在尝试用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com