gpt4 book ai didi

java - 如何对列表使用递归方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:14 25 4
gpt4 key购买 nike

我在思考如何使用递归方法来计算列表中的元素数量,然后跳转到该列表中的每个元素并计算它们存储的元素数量时遇到了一个小问题。我将尽力概括这一点,但我将使用我自己的例子。我拥有的数据结构是一个数组列表,我在其中存储了元素。所有这些都有一个数组列表,其中指向该元素的元素由前面的元素 ID 存储。所以:元素->列表->ID(整数,即2)->元素nr.2。我想通过递归方法计算每个元素有多少个前面的元素。我尝试了几个选项,例如将所有前面的元素存储在一个新列表中,然后将其大小指定为前面元素的数量,以及使用 counter-int。到目前为止我得到的最接近的是使用这个方法(id是一个数字,总是+1它位于包含它的数组列表中的索引):

private int getPredecessorCount(int id){
for(int i:elementList[id-1].predecessors){
return 1+getPredecessorCount(i);
}
return 0;
}

这为我提供了所有元素的正确答案,其中元素包含仅包含单个元素的列表。我无法让它与具有超过 1 个前驱元素的列表的元素一起使用。有任何想法吗?

我也尝试过:

    private int getPredecessorCount(int id, int counter) {
if(!elementList[id-1].predecessors.isEmpty()){
for(int i : elementList[id-1].predecessors){
counter+=getPredecessorCount(i, counter);
counter++;
}
}
return counter;

这给了我与前一个结果有些相同的结果,但是前一个给我的前任太少,而对于包含较大列表的前任,这个给了我太多。

最佳答案

好吧,让我们概括一下......

private int counter(List<Element> items) {

int count = 0;
for (Element item: items) {
count ++; // for the item counting
if (item.holdsElements) { // for inner elements
count = count + counter(item.getElements());
}
}

return count;
}

我特意编写了此方法的简化版本来说明应如何完成此操作。空检查和其他边缘情况会被有意忽略。

所以你计算列表中的所有元素...好吧,足够简单,如果一个元素包含内部项目,你就可以计算它们。然后返回绝对计数。

您的问题是,一旦获得第一个元素的计数,您就返回结果,而不考虑其他元素。使用调试器可以轻松发现这样的问题。

关于java - 如何对列表使用递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26533333/

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