【发布时间】:2016-04-23 05:27:29
【问题描述】:
我对此代码有一些疑问
public static String reverseString( String s )
{
if ( s.length() == 0 )
return "";
String firstChar = s.substring( 0, 1 );
String reverseRest = reverseString( s.substring( 1 ) );
String result = reverseRest + firstChar;
return result;
}
public static void main( String[] args )
{
String a = "The sky's the limit!";
System.out.println( reverseString( a ) );
}
问题 1:终止环境究竟是如何运作的? s.length 怎么会等于 0?
问题2:为什么代码需要有“firstChar”才能反转字符串?为什么reverseString接受0的子字符串而不需要添加第一个字符时代码不起作用?
【问题讨论】:
-
对不起,第一个问题应该提到,如果没有终止情况,代码不起作用,为什么看起来没有它代码可以正常工作时,为什么还要这样做?
-
如果没有终止条件,它最终会取一个空字符串的子字符串并崩溃。
-
@Tran- 所以你的意思是说代码在没有这种条件的情况下可以正常工作,
if ( s.length() == 0 ) return "";?你真的在没有这个条件的情况下运行它吗? -
@EvanKnowles 当然我了解代码的基本前提,但如果我还掌握了代码的“假设”部分,那将真的有助于我理解。
-
@SabirKhan 是的,我确实尝试在删除该部分的情况下运行它,但我得到了“线程中的异常”java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:java.lang 中的 1 .String.substring(String.java:1963) 在 TC1.reverseString(TC1.java:8) "
标签: java string recursion substring