任何人都可以解释和跟踪以下多个递归C程序吗?

时间:2016-05-30 09:35:05

标签: c recursion

我试图了解递归是如何工作的。我似乎不明白这个多次递归是如何工作的。请帮助和谢谢!

Here is the output

#include<stdio.h>
int R(int x);

int main()
{
    R(5);
    return 0;
}

int R(int x)
{
    if(x > 0){
        x--;
        R(x);
        R(x - 2);
        printf("%d ", x);
    }
}

2 个答案:

答案 0 :(得分:0)

看一下我制作的追踪树 trace tree

R(5)表示对5的R函数的调用,并且如您所知它的输出将是4.数字显示函数执行的顺序直到结束。除了它们之外还有勾选的那些将产生输出。

答案 1 :(得分:0)

R(5)调用R(4)会显示某些内容,然后R(2)会显示某些内容。之后R(5)显示4。这就是你在输出结尾看到4的原因。

R(4)显示 - R(2)显示 - 4

在4之前,您显示R(2)R(2)调用R(1)显示somenthing,然后R(0)显示任何内容。 R(2)显示1。这就是为什么你最后有一个1,就在4之前。

R(4)显示 - R(1)显示 - R(0)显示 - 1 4

等等......

R(4)显示 - R(1)显示 - 1 4

R(4)显示 - 0 1 4

您始终从结尾(右侧第一个)开始处理R()显示调用。

正如您所看到的,递归将反转数字的顺序(4,最大数字,是最后一个)。这是因为在递归调用R之后你有printf