F和G是两个程序,定义如下(在伪语言高级中 级别):
int G(int n) {
int b = 0;
int u = 0;
for (int k = 0; k <= n; k++) {
u = F(k);
b = (b*b)+u;
}
return b;
}
int F(int m) {
if(m == 0) {
return 1;
}
else {
int p = F(m-1);
return (2*p)+m;
}
}
System.out.println(G(n)); //where n is a natural number
使用 QtSpim,编写并测试一个程序,该程序读取第一个自然数 n,并显示在控制台上:
过程 G (n) 返回的值,按所述实现 G 和 F 之前。对G、F这两个过程的调用必须使用指令jal(跳转和链接)来实现
具有嵌套调用序列的轨道(参数之间有 括号)以及各种嵌套调用返回的值(括号之间的返回值),对于 G 和 F
n = 1 时的控制台输出示例:
- 结果:G (1) = 4
- 轨迹:G (1) -> F (0) -> F-return (1) -> F (1) -> F (0) -> F-return (1) -> F-return (3) ) -> G-return (4)
有谁可以帮我把这段C/C++代码翻译成MIPS语言吗?
最佳答案
稍加改动,“伪语言高级”代码就是纯 C(89)。您必须更改 F 和 G 的顺序或添加前向声明。顺便说一句,只有 F 是递归的,并且没有任何嵌套。 G 只是调用 F。
#include <stdio.h>
int F(int m)
{
if(m == 0) {
return 1;
}
else {
int p = F(m-1);
return (2*p)+m;
}
}
int G(int n)
{
int b = 0;
int u = 0;
for (int k = 0; k <= n; k++) {
u = F(k);
b = (b*b)+u;
}
return b;
}
int main(int argc, char** argv)
{
printf("%u\n", G(2));
return 0;
}
进入 C 语言后,您可以调用 gcc 为 MIPS 编译它(您可以选择处理器或通用 ISA 的名称):
gcc -Wall -std=c99 -march='mips3' -S -c filename.c
您的代码已最终编译为 MIPS。当然,如果这是家庭作业,让 gcc 为你做这些工作可能会被视为作弊。
关于c++ - MIPS 语言中的嵌套和递归过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29370772/