public class exM {
public static void main(String[] args) {
System.out.print(myMethod(0)); // change the power to 1,2,3,4
}
public static String myMethod(int n){
if (n==0){
return "*";
}
else {
return myMethod(n-1) + myMethod(n-1);
}
}
}
现在显而易见的是,如果使用0,它将直接转到*打印出来。 接下来,使用1。我可以理解这是转到其他地方并回到我们的方法0并打印出“*”+“*”我们得到“**”。
我无法理解的是,为什么当我们将功率改为2时,它会带回4个星号而不是2个。
有人可以向我解释这是怎么发生的吗?
提前谢谢
答案 0 :(得分:3)
因为您使用n-1调用该函数,对于每次调用,在2的情况下为1。您将该函数调用两次,因此您将进行两次递归,每次递增值为1。由于1!= 0,2次递归再次在2次递归中溢出,这次是值0,因为这是你的停止条件,它将打印这些4个星号。
所以基本上
myMethod(2)
/ \
myMethod(1) myMethod(1)
/ \ / \
myMethod(0) myMethod(0) myMethod(0) myMethod(0)
* * * *
答案 1 :(得分:3)
如果你写出递归,你就会明白了。
myMethod(0) = *
myMethod(1) = myMethod(0) + myMethod(0) = * + * = **
所以对于myMethod(2):
myMethod(2) = myMethod(1) + myMethod(1) = myMethod(0) + myMethod(0) + myMethod(0) + myMethod(0) = ****
答案 2 :(得分:1)
让我们一步一步。
2 != 0
所以转到else
myMethod(1) + myMethod(1)
myMethod(1)
,则会返回**
**
+ **
= ****
答案 3 :(得分:1)
我建议你用铅笔和纸来分析n = 0,n = 1,n = 2的时间。
通过这种递归,您将实现程序正在创建的树。
如果n = 0
您有一个' *'。
如果n = 1
你用n = 0调用两次方法 - >> 2x' *' - > ' **'
如果n = 2
您使用n = 1调用两次方法 - >> 2x(2x' *') - > ' ****'
如果你想要那个' *'是n
代码的值:
public static String myMethod(int n){
if (n==0){
return "*";
}
else {
return myMethod(n-1) + '*'; //One '*' more for each call.
}
}
答案 4 :(得分:0)
使用此功能,如果从0开始将n增加1,您将得到以下行:1,2,4,8,16 ...... 这是因为每次n!= 0时,每次n大于0
时都会执行2x函数答案 5 :(得分:-1)
我认为这很简单。
当您传入2时,它将返回
myMethod(1) + myMethod(1)
转换为** + ** ...