我是新来的。 我在Java中遇到了递归函数的问题。
public static void main(String[] args) {
System.out.println(f(3));
}
private static int f(int n) {
if (n<=0) return 1;
return 2*f(n-1)+3;
}
如果我设置n = 3
,则结果为29
。
请帮忙,我不明白结果,这会很好,
如果有人能够准确地解释这个功能发生了什么。
答案 0 :(得分:2)
查看方法
private static int f(int n) {
if (n<=0) return 1;
return 2*f(n-1)+3;
}
首先,f(3)
将被称为
方法返回2*f(2)+3
计算f(2)
方法需要返回2*f(1)+3
f(1)
将计算为2*f(0)+3
f(0)
1
为n<=0
,所以让它回溯
2*1+3 = 5 = f(1)
2*5+3 = 13 = f(2)
2*13+3 = 29 = f(3)
答案 1 :(得分:1)
f(0)为1。
通过将前一个数字加倍并添加3来获得下一个数字。
所以序列是1,5,13,29,61等
通过递归解决这个问题并不是最好的方法(你的堆栈会因很小的术语而溢出);一个正常的循环会更好。
答案 2 :(得分:1)
学习跟踪递归函数的执行有助于您将来创建。这是一项重要的发展技能。
让我们做一下。
每个递归函数都有一个&#34;退出条件&#34;或&#34;基本情况&#34;。在你的函数中,当n <= 0时。你传入3,结果将是:
2 * f(2)+ 3
什么是f(2)? 2 * f(1)+ 3
什么是f(1)? 2 * f(0)+3
我们知道f(0)是1,因为这是你的基本情况,所以现在倒退并填写下表:
f(0): 1
f(1): 2*1 + 3 = 5
f(2): 2*5 + 3 = 13
f(3): 2*13 + 3 = 29