试图理解递归

时间:2012-12-20 10:14:53

标签: java recursion

public static int fun(int x) {
    if(x<1){
        return 1;
    } else {

        return x+fun(x-1)+fun(x-2);
    }
}

我在尝试解决给定数字的递归时遇到了一些问题。例如,x可能是3或4或其他什么,结果会是什么。

3 个答案:

答案 0 :(得分:1)

当你为x = 3调用函数时,你会得到类似这样的递归调用:

有趣(3) - &gt; 3 + fun(2)+ fun(1){1} 有趣(2) - &gt; 2 + fun(1){2} + fun(0){1}

有趣(1){2} - &gt; 1 + fun(0){2} + fun(-1) fun(0){2} - &gt; 1 有趣(-1) - &gt; 1

卷回来 有趣(1){2} - &gt; 1 + 1 + 1 - &gt; 3

如此有趣(2) - &gt; 2 + 3 +乐趣(0){1} fun(0){1} - &gt; 1 因此, 有趣(2) - &gt; 2 + 3 + 1 - &gt; 6

然后有趣(1){1}被调用,经历与fun(1){1}相同的过程。

这一切都回归有趣(3) - &gt; 3 + 6 + 3 - &gt; 12

答案 1 :(得分:1)

试着这个来帮助你理解:

//do first call with trace ""
public static int fun(int x, String trace) {
    System.out.println(trace + " ENTRY x=" + x);
    int ret;
    if(x<1){
        ret = 1;
    } else {   
        ret = x+fun(x-1, trace+'<')+fun(x-2, trace+'>');
    }
    System.out.println(trace + " RETURN " + ret);
    return ret;
}

答案 2 :(得分:0)

x=3
return 3+fun(2)+fun(1)         // so return 3+6+3
    fun(2) = 2+fun(1)+fun(0)   // so fun(2)=6
        fun(1) = 1+fun(0)+1
            fun(0) = 1
        fun(0) = 1

    fun(1) = 1+fun(0)+1        // so fun(1)=3
         fun(0) = 1

result return 12