谁能解释并跟踪以下多重递归 C 程序?

标签 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);
    }
}

最佳答案

R(5) 调用 R(4) 来显示一些内容,然后调用 R(2) 来显示一些内容。之后R(5) 显示4。这就是为什么您会在输出末尾看到 4。

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

在 4 之前显示 R(2)R(2) 调用 R(1) 显示某些内容,然后调用 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()display 调用(首先是右侧)。

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

关于谁能解释并跟踪以下多重递归 C 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522312/

相关文章:

c - fifo 的缓冲版本是什么?

c - fgetc 总是返回 -1

java - 为什么不能将 LinkedList 的最后一个节点设置为 null?

c++ - EXIT_SUCCESS 和 EXIT_FAILURE。是一次编译到处运行还是一次编写到处编译?

c - if语句在C中导致 "Segmentation fault: 11"

c - 程序在达到限制后不分配更多内存

json - 在 R 中展平深层嵌套的 json

javascript - 如何使用递归计算字符串中的所有回文?

recursion - Ocaml 自引用

javascript - AngularJS - 如何访问嵌套 ng-repeat 中的数组