请详细解释什么是递归函数，并给出一个具体的C语言的例子。答案用markdown格式，包含三个标题：简介、原理以及示例
user
```markdown
# 递归函数

## 简介
递归函数是一种在函数定义中使用函数自身的方法。它通常用于解决可以被分解为相同问题的较小实例的问题。递归函数必须有一个或多个基本情况（base cases），这些情况不需要递归调用就能直接解决，以及一个或多个递归情况（recursive cases），这些情况会导致函数调用自身。

## 原理
递归函数的基本原理是“分而治之”（divide and conquer）。函数在执行过程中，不断将问题分解为更小的子问题，直到子问题足够简单，可以直接解决。然后，通过组合这些子问题的解，最终解决原始问题。递归函数的执行过程可以看作是一个函数调用栈的操作，每个递归调用都会在栈上创建一个新的帧。

## 示例
下面是一个计算阶乘的递归函数的C语言示例：

```c
#include <stdio.h>

// 递归函数定义
int factorial(int n) {
    // 基本情况
    if (n == 0
assistant