我创建了一个我认为是递归的方法。
public AssaultTeam getTeam(String teamName) {
for(AssaultTeam team : teams){
if(team.getName().equals(teamName)){
return team;
}
}
AssaultTeam newTeam = new AssaultTeam(teamName);
teams.add(newTeam);
return getTeam(teamName);
}
'teams'是AssaultTeam的ArrayList
我之前从未使用过递归,但我不确定这种方法是否有用。
答案 0 :(得分:3)
是的,这是递归,递归是在调用方法本身时,你在代码return getTeam(teamNames);
是的,它会起作用,但有点奇怪,你实际上不需要这个解决方案的递归
public AssaultTeam getTeam(String teamName) {
//iterate throught the teams list - OK
for(AssaultTeam team : teams){
if(team.getName().equals(teamName)){
//if found - OK
return team;
}
}
AssaultTeam newTeam = new AssaultTeam(teamName);
teams.add(newTeam);
//call the getTeam, which will cause another iteration to find the item - NOT GOOD
//return getTeam(teamName);
//just return item you just created
return newTeam;
}
答案 1 :(得分:2)
它是递归的,因为该方法调用自身。由于其中一条评论中提到的==
比较,它不起作用。您可以使用String#equals()
方法来解决该问题。但是,递归是不必要的。你可以返回newTeam
。
答案 2 :(得分:1)
在递归中,该方法返回所需的结果(直接大小写)或用更简单的问题调用自身(递归情况)。
在您的情况下,直接案例可能是team.getName().equals(teamName)
,或者您到达数组的末尾,然后您可以返回team
。
您的递归案例可能是调用团队数组中的下一个元素。
public AssaultTeam getTeam(int index, String teamName)
{
AssaultTeam team = teams.get(index);
if (team.getName().equals(teamName))
{
return team;
}
else if (index == teams.size())
{
AssaultTeam newTeam = new AssaultTeam(teamName);
teams.add(newTeam);
return team;
}
else
{
++index;
return getTeam(index, teamName);
}
}
答案 3 :(得分:0)
是递归吗?我认为技术上是,因为该方法有一个基本情况,否则会延迟回到自身。
然而,这并不是递归的一个特别好的例子,因为只有两种情况。在第二种情况下(团队不存在),递归调用将始终立即返回。正如其他人所说,用return newTeam
替换最后一行更有意义,因为这完全等同(并且更简单/更容易理解)。
在稍微更深奥的一点上,递归倾向于与函数式编程风格相关联,这通常避免了可变变量。通常,递归方法将使用不同的参数再次调用方法,并且该方法将充当函数,即在给定相同输入的情况下将始终返回相同的结果。从技术上讲,你没有理由不能进行递归和可变性,但个人说话会破坏我的先入之见并使我感到困惑。 (如果它采用两个整数并返回其最大值,则可以调用方法add
的方式大致相同;它在技术上有效,但它会导致人们进行双重操作。)
如果有帮助,这是一个经典的递归示例 - 查看字符串列表是否包含给定元素:
public boolean recContains(String elem, List<String> list) {
if (list.isEmpty())
return false;
else if (list.get(0).equals(elem))
return true;
else
return recContains(elem, list.subList(1, list.length()));
}
请注意:
这些在技术上可能不是正确的递归方法所必需的,但它们肯定是我将与它们关联的那种属性。
答案 4 :(得分:0)
它会在运行中运行吗?是。
它能做你想做的事吗?否。
对象(如String)需要与Java中的.equals进行比较。由Nambari指出。
是递归吗?技术上是的,因为它自称。
它是递归的必要吗?不,你知道它应该返回什么,所以你应该把它归还。
你想做这样的事情:
public AssaultTeam getTeam(String teamName){
for(AssaultTeam team : teams){
if(team.getName().equals(teamName)){
return team;
}
}
AssaultTeam newTeam = new AssaultTeam(teamName);
teams.add(newTeam);
return newTeam;
}
编辑:我认为解释如何使用递归会很有用。
递归由两件事来定义。
假设您有一个3x3的方格填充数字
1 2 3 4 5 6 7 8 9
你想从左上角开始,你可以向右或向下移动,你想要在右下角结束。如果您在踩到的方格中添加每个数字的总和,则需要知道最大可能值;
一些伪代码
int recurse(x,y)
int max = 0;
if can move right
max = recurse(x+1,y)
if can move down
int tmp = recurse(x,y+1)
if tmp greater than max
max = tmp;
return square[x][y] + max;
只是一个使用递归的愚蠢示例。希望这有助于