【发布时间】:2017-09-12 09:03:25
【问题描述】:
我有一个非常简单的函数来找出一堆整数的最大非负值。我想将此函数转换为递归函数。 有几点需要牢记:
- 在运行函数之前,我们已经初始化了
num,但是没有给它赋值。拜托,我们不应该依赖于 C 会在某些条件下自动将 0 分配给num的事实 - 运行函数后,堆栈
s为空,我们将最大非负值存储在num - 我是 C 和数据结构的初学者,所以请多多关照 :)
这是迭代函数:
void max_stack(stack *s, int *num){
*num = 0;
int aux = 0;
while (!emptyStack(*s)){
aux = top(*s);
pop(s);
if (aux>*num){
*num = aux;
}
}
}
【问题讨论】:
-
我不知道您为什么要将其转换为递归函数,因为您现在拥有的解决方案比递归函数更适合 C...
-
@AnttiHaapala 可能需要家庭作业?
-
@AnttiHappala:我正在努力更好地理解递归,并希望能够更流畅地从迭代函数到递归函数,反之亦然。就是这样。这个问题的目的是为了学习。我列举的限制是为了确保这两个函数是 100% 等效的。
-
“我们已经初始化了 num,但还没有给它赋值。” - 很难理解 的含义。如果它被初始化,它有一个确定的值。此外,
num在此代码中是一个指针,并且被取消引用,因此它更好 包含一个有效地址。如果您正在谈论取消引用的值,那么您当然可以通过*num = 0;分配给它最后,您的迭代函数都找到最大值 并且 清空堆栈。那是故意的?你说这是最终结果,但在这里澄清一下。 -
@WhosCraig 我的意思是在调用函数之前我们只有这个:int number; /*我们还设置了一个整数栈“example_stack”,它可能是满的也可能是空的*/ /*我们现在调用函数*/ max_stack(&example_stack, &number); /*我们现在应该让example_stack为空,堆栈中的最大正值存储在number中*/
标签: c recursion stack iteration