Java Can';我不理解在这个例子中递归是如何工作的
我得到了以下代码:Java Can';我不理解在这个例子中递归是如何工作的,java,recursion,Java,Recursion,我得到了以下代码: public int func(int n){ if(n == 1) return 2; else return 3 * func(n-1)+1; } 我可以理解像阶乘和斐波那契这样的递归,但对于这一点我不能理解。 我试图追溯逻辑: if n is 3: return 3 * func(2) + 1 return 3 * func(1) + 1 return 3 * 2 + 1 return 7 我总是以7和其他任何数字结束,我知道这是错误的
public int func(int n){
if(n == 1)
return 2;
else
return 3 * func(n-1)+1;
}
我可以理解像阶乘和斐波那契这样的递归,但对于这一点我不能理解。
我试图追溯逻辑:
if n is 3:
return 3 * func(2) + 1
return 3 * func(1) + 1
return 3 * 2 + 1
return 7
我总是以7和其他任何数字结束,我知道这是错误的,因为我在运行程序时得到不同的值。你能帮我理解递归是如何工作的吗?我认为这是不言自明的,如果你需要更多信息,请发表评论
if n is 3:
return 3 * func(2) + 1
return 3 * (3 * func(1) + 1) + 1 //func(2) is equals to 3 * func(1) + 1
return 3 * (3 * 2 + 1) + 1 //func(1) is equals to 2
return 22
如果n是3
func(3)
=3*func(2)+1
=3*(3*func(1)+1)+1
=3*(3*2+1)+1
=22
如果n是4
func(4)
=3*func(3)+1
=3*22+1
=67
您很接近,但缺少一个关键点:
func(3) is: 3 * func(2) + 1
func(2) is: 3 * func(1) + 1
func(1) is: 2
Therefore, func(2) is 3*2+1 = 7.
And func(3) is 3*7+1 = 22
您必须将最深递归调用得到的值重新放入上一级,以此类推
func(1) = 2
func(2) = 3 * func(1) + 1 = 7
func(3) = 3 * func(2) + 1 = 22
func(4) = 3 * func(3) + 1 = 67
- 如果
为1,则返回n
(因此2
)func(1)=2
- 如果
为2,则返回n
,即3*func(1)+1
(因此3*2+1=7
)func(2)=7
- 如果
为3,则返回n
,即3*func(2)+1
(因此3*7+1=22
)func(3)=22
- 如果
为4,则返回n
,即3*func(3)+1
(因此3*22+1=67
)func(4)=67
等等。换句话说,当
n=1
时,它只返回2,而在所有其他情况下,它返回func(n-1)
的值乘以3,再加上1。当n=3
时
func(3) = > return 3 * func(2) + 1
其中func(2)
为
func(2) = > return 3 * func(1) + 1
其中func(1)
为
func(1) = > return 2
一旦你把它们结合起来,你就得到了
func(3) => return 3 * (3 * (2) + 1) + 1
func(3) => return 22
一般来说,递归方法分为两部分