使用递归的功能

时间:2011-04-07 14:28:36

标签: recursion mips

我想做一个程序,它发现数组的整数发生的次数要小于或等于特定的数字。我必须使用递归。 我想在整数大于数字时返回0,否则返回1。 最后,我想通过再次调用函数作为递归来找到添加所有返回的方法。 请帮帮我!

我是否每次都要在堆栈中保存返回值($ v0)?

2 个答案:

答案 0 :(得分:0)

是的,在每个函数调用开始时,您调用堆栈并存储必要的值,并且在函数结尾(结尾)您必须将堆栈重置到其位置,否则您将恢复无效的变量和数据从堆栈。

我的建议是将地址传递给每个调用的数组和数组中的项目数,并返回迭代数(在递归调用检查迭代之前>数组量,并分支到您的结语)以及总发生次数。

通过我的脑子快速思考告诉我,如果你正确实现它,它应该工作。遗憾的是,我没有时间写下这一分钟的例子(我不得不很快离开课堂),但理论应该是合理的。我可以查看你的代码,也许可以稍后帮忙和/或今天晚些时候写一个快速的例子。

答案 1 :(得分:0)

只是几个想法:

  1. 通常,按照惯例,值0表示错误;而任何其他价值都是真的。为了避免混淆,您可能希望在代码中采用该约定。当你描述自己的想法时,真相和虚假似乎与传统的极性相反。

  2. 也许是一个应该让你的教练满意的改进:你可能想要考虑在两个比较整数之间返回算术差异而不是返回0或1作为整数比较的结果。这不仅会给你相等(即差值== 0),还会给你一些关于数组整数成员的附加信息,而不会增加程序复杂性或时间的成本。我被告知,在其他条件相同的情况下,函数返回的信息越多越好。

  3. 关于递归:我不认为你必须保留堆栈中的所有($ v0)s,只要你记得累积每个返回的($ v0)某处的全局变量。但这只是我目前的看法,没有看过这个问题。

  4. HTH。我不得不说这是一个非常好的,小的,可管理的递归介绍。布拉沃。