运行这样的递归函数(在gcc 7.3.1中编译):
#include <stdio.h>
int arr[] = {5,1,2,6,7,3};
int arraySize = 6;
int recfind(int value, int index)
{
if (arr[index] == value)
return 1;
if (index >= arraySize)
return 0;
// return recfind(value, ++index);
recfind(value, ++index);
}
int main() {
printf("found 6? %d\n", recfind(6, 0));
printf("found 9? %d\n", recfind(9, 0));
}
我得到以下输出:
found 6? 1
found 9? 0
为什么这样做?由于recfind
不返回递归调用的结果,如何选择较高级别调用的返回值?
对于C部分是N1256中的6.9.1:
如果到达终止函数的},并且调用者使用了函数调用的值,则该行为未定义。
因此,程序的行为是不确定的。
为什么这样做?
您正在使用的目标+编译器有可能不会篡改包含来自最后一个(递归)函数调用的返回值的寄存器。C并没有强制使用这种机制来返回规格值。
因此,尽管听起来很明智,但不能保证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句