MIPS语言中的嵌套和递归过程
Nested and recursive procedures in MIPS language
F和G是两个过程,定义如下(在伪语言high级别):
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返回(1)->F(1)>>F返回(2)->F返回(3)->G返回(4)
有人能帮我用MIPS语言翻译这个C/C++代码吗?
"伪语言高级"代码是纯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("%un", G(2));
return 0;
}
一旦进入C,您就可以调用gcc为MIPS编译它(您可以选择处理器或通用ISA的名称):
gcc -Wall -std=c99 -march='mips3' -S -c filename.c
并且您已经将您的代码最终编译为MIPS。当然,如果这是家庭作业,让gcc为你做这项工作可能会被视为作弊。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- MIPS语言中的嵌套和递归过程
- 在递归函数中,c++基转换过程中意外输出到屏幕