递归函数帮助-Java

递归函数帮助-Java,java,function,recursion,Java,Function,Recursion,我是新来的。 我在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; } publicstaticvoidmain(字符串[]args){ 系统输出println(f(3)); } 私有静态int f(

我是新来的。 我在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; 
}
publicstaticvoidmain(字符串[]args){
系统输出println(f(3));
}
私有静态int f(int n){
如果(n查看该方法

private static int f(int n) {
    if (n<=0) return 1;
    return 2*f(n-1)+3; 
}
f(0)是1

将上一个数字加倍,再加上3,就可以得到下一个数字

所以序列是1,5,13,29,61,等等


通过递归解决这一问题不是最好的方法(你的堆栈会在很短的时间内溢出);普通循环会更好。

学习跟踪递归函数的执行有助于你将来创建递归函数。这是一项重要的技能

让我们追踪一下


每个递归函数都有一个“退出条件”或“基本情况”。在您的函数中,是nLearn如何使用调试器的时候。它在很多情况下都很有用。您了解n=1和n=2的结果吗?Netbeans中的调试器在这种情况下对我没有帮助您的解释与我的几乎相同,但更简洁。令人惊讶的解释,非常感谢:)Netbeans中的调试器没有帮助我,它没有一步一步地向我显示结果:(
2*1+3 = 5 = f(1)
2*5+3 = 13 = f(2)
2*13+3 = 29 = f(3)
f(0): 1
f(1): 2*1 + 3 = 5
f(2): 2*5 + 3 = 13
f(3): 2*13 + 3 = 29