MST
星途 面试题库

面试题:C++中导致堆栈溢出较为常见的一种递归情况分析

在C++ 中,编写一个简单的递归函数示例,并解释如果导致堆栈溢出,可能的原因是什么。
26.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

递归函数示例

#include <iostream>

// 递归函数计算阶乘
int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

堆栈溢出可能原因

  1. 缺少终止条件:如果递归函数没有正确的终止条件,例如上述factorial函数中没有if (n == 0 || n == 1)这部分,函数会不断调用自身,导致栈空间被耗尽。
  2. 递归层次过深:即使有终止条件,但如果递归调用的层次非常深,由于栈空间有限,也可能导致堆栈溢出。例如在处理非常大的n值时,factorial函数不断调用自身,栈上会积累大量的函数调用记录,最终耗尽栈空间。