请考虑递归函数:
1) int calc(int num)
{
2) sum=sum+num;//sum is a global variable
3) num--;
4) if(num==0)
5) return sum;
6) calc(num);
}
它计算一个整数的总和。
我的老师告诉我这不是递归,而是一个简单的函数调用,因为你需要传递num--
作为参数并返回calc(num--)
.
我很震惊,因为当函数调用自身时我只知道一件事,那就是它的递归。
她也给出了理由,那行不行。2
and 3
额外存储在堆栈内存中。
我不知道她指的是什么。所以在经历了堆栈存储之后:
在这里,我注意到传递的函数参数是以递归方式传递的,例如n--
in my function
。
以便它们可以链接到下一个function call
.
正因为如此,我们可以将其称为简单的吗?function call
代替recursion
?
尽管你所呈现的内容在技术上是递归的,但老师心里有一些非常具体的东西。另一种不依赖于全局的形式看起来像这样:
int calc(int num) // Assume this is valid for non-negative numbers
// In that case, type "unsigned int" would be more appropriate
{
if ( num < 0 )
return -1; // Consider this an error; won't happen in recursive case
if ( num == 0 )
return 0;
return num + calc(num-1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)