Java 不确定我是否正确地使用链接列表进行了递归
我试图通过递归找到最长的字符串,虽然我得到了正确的答案,但我不确定我的方法是否是递归。我有一个链接列表在我的主要,我需要fin最长的。我的字符串最大的方法是“递归”Java 不确定我是否正确地使用链接列表进行了递归,java,Java,我试图通过递归找到最长的字符串,虽然我得到了正确的答案,但我不确定我的方法是否是递归。我有一个链接列表在我的主要,我需要fin最长的。我的字符串最大的方法是“递归” import java.util.LinkedList; 公共类MyLinkedList扩展了LinkedList{ 公共静态字符串max=“”; 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 MyLinkedList MyLinkedList=新建MyLinkedList(); myLinke
import java.util.LinkedList;
公共类MyLinkedList扩展了LinkedList{
公共静态字符串max=“”;
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
MyLinkedList MyLinkedList=新建MyLinkedList();
myLinkedList.add(“莎拉”);
添加(“芭芭拉”);
myLinkedList.add(“Tom”);
myLinkedList.add(“乔治”);
字符串最大值=myLinkedList.findLargestStarter();
字符串最大值1=最大值(myLinkedList,0,1);
系统输出打印项次(“最大”+最大1);
系统输出打印项次(“最大值”+最大值);
}
公共字符串findLargestStarter()
{
//最大=最大;
返回null;
}
公共静态字符串最大(MyLinkedList MyLinkedList、int lowerIndex、int upperIndex)
{
if(lowerIndex==upperIndex)//子列表的大小//为1
max=myLinkedList.get(lowerIndex);
其他的
{
max=最大(myLinkedList,lowerIndex+1,upperIndex);
if(myLinkedList.get(lowerIndex.length()>myLinkedList.get(upperIndex.length())
max=myLinkedList.get(lowerIndex);
其他的
max=myLinkedList.get(upperIndex);
}
//系统输出打印项次(最大值);
返回最大值;
}
}不要逐行进行,您的递归方法
最大值
看起来很好,如下所示:
我不明白为什么您在
else
块中对maximust
方法的调用下面添加了逻辑。希望您能更好地理解这一点。为了使本程序更具可读性和整体效果,您可以做一些小的改进:
- 消除全局静态变量的使用。递归函数应该返回答案作为返回参数,这真的很糟糕
- 如果您想尝试正确地实现递归,而不是创建自己的数据结构,那么请使用java.util包中的list李>
import java.util.Arrays;
import java.util.List;
public class FindTheLongest {
public static void main(String[] args) {
final List<String> list = Arrays.asList(new String[] { "Sarah", "Barbara", "Tom", "George" });
System.out.println(findLongestString(list, list.get(0)));
}
private static String findLongestString(List<String> list, String longestString) {
if (!list.isEmpty())
{
final List<String> nextList = list.subList(1, list.size());
final String nextLongestString = longestString.length() > list.get(0).length() ? longestString : list.get(0);
return findLongestString(nextList, nextLongestString);
}
return longestString;
}
}
导入java.util.array;
导入java.util.List;
公共类查找最长{
公共静态void main(字符串[]args){
final List=Arrays.asList(新字符串[]{“Sarah”、“Barbara”、“Tom”、“George”});
System.out.println(findLongestString(list,list.get(0));
}
私有静态字符串findLongestString(列表,字符串longestString){
如果(!list.isEmpty())
{
final List nextList=List.subList(1,List.size());
final String nextLongestString=longestString.length()>list.get(0.length()?longestring:list.get(0);
返回findLongestString(nextList,nextLongestString);
}
返回最长的字符串;
}
}
请告诉我您在寻找什么。我们的目标是练习递归 我更欣赏约根德拉·辛格的答案,因为它更像学者 Petro Semeniuk的提议很有效,但这不是问题所在 AMHO重用LinkedList
public class StringNode // no generics, it's not the goal
{
public StringNode next;
public String text;
public StringNode( String text )
{
this( text, null );
}
public StringNode( String text, StringNode next )
{
this.text = text;
this.next = next;
}
public String getLongest()
{
String nextText = (( next == null ) ? "" : this.next.getLongest());
return ( this.text.length() > nextText.length()) ? this.text : nextText;
}
public static void main( String[] args )
{
StringNode head = null;
for( String text : new String[] { "Sarah", "Barbara", "Tom", "George" })
{
head = new StringNode( text, head );
}
System.err.println( head.getLongest());
}
}
性能说明:新运算符不会在main()之外直接调用。top(您的if块)是否应该调用自身?否。这是当您到达末尾并找到递归调用特定循环的最大值时的终止标准。该最大值最终从函数返回,以向后移动循环并完成您的函数。请让我知道,如果你需要更多的投入。我将尝试通过一个简单的例子来解释。负面投票人:请添加一些注释以帮助我理解差距/问题。在代码中添加一些注释如何,以便我们了解您正在做什么。描述您尝试使用的算法。在我看来,您的代码只查看列表的前两个元素。
public class StringNode // no generics, it's not the goal
{
public StringNode next;
public String text;
public StringNode( String text )
{
this( text, null );
}
public StringNode( String text, StringNode next )
{
this.text = text;
this.next = next;
}
public String getLongest()
{
String nextText = (( next == null ) ? "" : this.next.getLongest());
return ( this.text.length() > nextText.length()) ? this.text : nextText;
}
public static void main( String[] args )
{
StringNode head = null;
for( String text : new String[] { "Sarah", "Barbara", "Tom", "George" })
{
head = new StringNode( text, head );
}
System.err.println( head.getLongest());
}
}