Recursion 如何将此序列转换为MIPS汇编代码?

Recursion 如何将此序列转换为MIPS汇编代码?,recursion,assembly,mips,sequence,mutual-recursion,Recursion,Assembly,Mips,Sequence,Mutual Recursion,所以在过去的几周里,我一直在学习机器代码和汇编语言,但我有点挣扎。我作业中的一个问题是将下面列出的序列转换成汇编语言,但我不知道从哪里开始。在我们的笔记中,没有任何东西看起来更接近这个问题,教科书也没有多大帮助。以下是给我的信息: F(0) = 1; M(0) = 0; F(n) = n – M(F(n – 1)) when n > 0 M(n) = n – F(M(n – 1)) when n > 0 在这一点上我几乎不知所措,因为在这个问题之前我们一直在做的一切都是转换if和w

所以在过去的几周里,我一直在学习机器代码和汇编语言,但我有点挣扎。我作业中的一个问题是将下面列出的序列转换成汇编语言,但我不知道从哪里开始。在我们的笔记中,没有任何东西看起来更接近这个问题,教科书也没有多大帮助。以下是给我的信息:

F(0) = 1;
M(0) = 0;
F(n) = n – M(F(n – 1)) when n > 0
M(n) = n – F(M(n – 1)) when n > 0

在这一点上我几乎不知所措,因为在这个问题之前我们一直在做的一切都是转换if和while循环以及一些数组比较。谁能给我指引正确的方向吗?

你可以试着用这个或多或少的数学符号把它翻译成C。采取这一中间步骤将有助于进一步了解您真正的困境(数学符号==>C或C==>assembly)。该定义是相互递归的,有两个函数相互调用,并且是自递归的。想必您已经学会了如何编写调用另一个函数的函数。或者,如果你愿意,它也可以简化为迭代的形式,除非赋值要求你用相互递归实现它。我很好奇GCC或clang是否可以将其优化为迭代形式。gcc9.2确实部分地将它们相互嵌入,但基本上会变得狂暴,并发出6000多行asm。(我为x86编译,因为Godbolt的MIPS GCC安装仅为gcc5.4)。Clang只是使正常的asm基本上按照编写的方式编译,而不尝试内联或优化到迭代。