通常,如果我有一个非终止的递归函数,它将不会永远运行,因为它将导致stackoverflow,最终导致分段错误。
据我所知,尾递归函数将当前的调用堆栈帧替换为具有实际值的相同函数的帧。
我得出的结论是,尾递归函数不能有stackoverflow,因此它们应该永远运行。
无尾递归:
int factor_rec (int n) {
if (n == 0)
return 1;
return n * factor_rec (n - 1);
}
尾递归:
int factor_rec_tr (int n, int akk) {
if (n == 0)
return akk;
return factor_rec_tr (n - 1, n * akk);
}
但是,当这些函数以负值调用时,这两个函数都会导致分段错误。为什么?