请解释如何评估以下递归代码?

时间:2014-01-30 14:08:44

标签: c recursion

void fun(int n)
{
    if(n > 0) {
        fun(--n); 
        printf("%d", n);
        fun(--n);
    }
}

以下代码如何评估?它将输出设为0 1 2 0

1 个答案:

答案 0 :(得分:1)

fun(3) //n=3
    func(2) // n = 3, (--n) = 2
        func(1) // n = 2, (--n) = 1 
            func(0) // n = 1, (--n) = 0
            printf("%d", 0) // n=0   **Got 0 **
            func(-1) // n = 0, (--n) = -1

        printf("%d",1) // n = 1      **Got 0 1** 
        func(0) // n = 1, (--n) = 0


    printf("%d", 2) // n =2           "Got 0 1 2"
    func(1) // n = 2, (--n) = 1
        func(0) // n = 1, (--n) = 0
        printf("%d", 0) // n=0       ***Got 0 1 2 0*
        func(-1) // n = 0, (--n) = -1