C 教程

C 教程 C 语言简介 C 下载安装和环境配置 C 快速入门 C 语法 C 输出 C 注释 C 变量 C 数据类型 C 常量 C 运算符 C 布尔值 C If...Else 语句 C Switch 语句 C While 循环 C For 循环 C Break/Continue 语句 C 数组 C 字符串 C 用户输入 C 内存地址 C 指针

C 函数

C 函数 C 函数参数 C 作用域 C 函数声明 C 递归 C 数学函数

C 文件

C 创建文件 C 写入文件 C 读取文件

C 结构体

C 结构体 C 嵌套结构体 C 结构体和指针 C 联合体 C typedef

C 枚举

C 枚举

C 内存

C 内存管理

C 错误

C 错误 C 调试 C 空值 C 错误处理 C 输入验证

C 更多

C 日期 C 随机数 C 宏 C 代码组织 C 存储类 C 位运算符 C 固定宽度整数

C 项目

C 项目

C 参考资料

C 参考资料 C 关键词 C <stdio.h> C <stdlib.h> C <string.h> C <math.h> C <ctype.h> C <time.h>

C 标准库参考

C 标准库 - 参考手册 C 标准库 - <assert.h> C 标准库 - <ctype.h> C 标准库 - <errno.h> C 标准库 - <float.h> C 标准库 - <limits.h> C 标准库 - <locale.h> C 标准库 - <math.h> C 标准库 - <setjmp.h> C 标准库 - <signal.h> C 标准库 - <stdarg.h> C 标准库 - <stddef.h> C 标准库 - <stdio.h> C 标准库 - <stdlib.h> C 标准库 - <string.h> C 标准库 - <time.h>

C 实例

C 语言实例 C 经典100例 C 编译器 C 测验


C 递归

递归

递归是一种让函数自身被调用的技术。这种技术可以将复杂的问题分解成更容易解决的简单问题。

递归可能有点难理解。弄明白它工作原理的最佳方法是进行实验。


递归示例

两个数相加很容易,但计算一系列数字的和就比较复杂了。下面的示例使用递归将一系列数字相加,并将其分解为简单的两个数相加:

示例

使用递归计算 1 到 10 之间所有数字的和:


#include <stdio.h>

int sum(int k);

int main() {
  int result = sum(10);
  printf("%d", result);
  return 0;
}

int sum(int k) {
  if (k > 0) {
    return k + sum(k - 1);
  } else {
    return 0;
  }
}

亲自试一试 »

示例详解

当调用 sum() 函数时,它会将参数 k 添加到小于 k 的所有数字之和中,并返回结果。当 k 等于 0 时,函数返回 0。程序运行时遵循以下步骤:

10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

由于当k为0时该函数不会调用自身,因此程序在此处停止并返回结果。

开发者在使用递归时应格外谨慎,因为很容易写出永不终止的函数,或者占用过多内存或处理器资源的函数。然而,如果编写得当,递归可以是一种非常高效且数学上优雅的编程方法。


示例

使用递归从 5 开始倒数:


#include <stdio.h>

void countdown(int n);

int main() {
  countdown(5);
  return 0;
}

void countdown(int n) {
  if (n > 0) {
    printf("%d ", n);
    countdown(n - 1);
  }
}

亲自试一试 »

该函数会调用自身,每次调用时使用 n - 1,直到 n 变为 0。


使用递归计算阶乘

本示例使用递归函数计算 5 的阶乘:

示例


#include <stdio.h>

int factorial(int n);

int main() {
  printf("Factorial of 5 is %d", factorial(5));
  return 0;
}

int factorial(int n) {
  if (n > 1) {
    return n * factorial(n - 1);
  } else {
    return 1;
  }
}

亲自试一试 »

阶乘是指将一个数依次乘以它前面的所有数,直到 1。 例如,5 的阶乘是:5 * 4 * 3 * 2 * 1 = 120。 根据定义,0! 也等于 1。