在我研究递归算法时,其代码如下:
String n = starString(3);
System.out.print(n);
} public static String starString(int n){
if(n < 0) {
throw new IllegalArgumentException();
}else if(n == 0) {
return "*";
}else{
return starString(n - 1) + starString(n - 1);
}
我认为代码可以像下面那样工作
String n = starString(3); //Value is 3 then send 3 to function
所以它进入了else
条件3次,对吧?
starString(3 - 1) + starString(3 - 1); //Its return is "**"
starString(2 - 1) + starString(2 - 1); //Its return is "**"
starString(1 - 1) + starString(1 - 1); //Its return is "**"
我认为结果应该像这样-> ****** //6 items
但是程序显示以下内容-> ******** //8 items
有人可以弄清楚为什么吗?
答案 0 :(得分:2)
致电starString(3)
时,它将返回:
starString(2) + starString(2)
上面的表达式扩展为(这是您弄错了的地方):
(starString(1) + starString(1)) + (starString(1) + starString(1))
然后,这些调用中的每一个都会扩展为:
((starString(0) + starString(0)) + (starString(0) + starString(0))) + ((starString(0) + starString(0)) + (starString(0) + starString(0)))
以下是上述格式的版本:
(
(starString(0) + starString(0))
+
(starString(0) + starString(0))
)
+
(
(starString(0) + starString(0))
+
(starString(0) + starString(0))
)
最外面的括号是starString(2)
调用。内括号是starString(1)
调用。
如您所见,有8个电话starString
,因此有8个*
。