【发布时间】:2015-01-12 23:25:09
【问题描述】:
我发现了一个让我有点惊讶的递归函数,这个函数计算了出现在数组中的所有负数:
int count_negative(int arr[], int n)
{
if ( n > 0 )
return (*arr < 0) + count_negative( ++arr, n - 1 );
return 0;
}
谁能解释一下这条线:
return (*arr < 0) + count_negative( ++arr, n-1 );
谢谢
【问题讨论】:
-
这是一个相当糟糕的递归实现;它不符合被转换为尾调用的条件,因此与迭代实现相比,性能会受到影响。
-
这不是
(*arr ...) + count_negative( ++arr, ...惹的UB吗? -
@cdhowie:GCC 似乎 TCO 很好。