递归 ( recursion)
C 语 言 的 函 数 可 进 行 递 回 呼 叫 ( recursive call ) , 也 就 是 说 在函 数 之 中 可 呼 叫 函 数 本 身 。 函 数 在 进 行 递归 呼 叫 时 , 在 其 所 使 用 的 变 数 被 堆 积 在 堆 叠 区 域 , 每次 执 行 return 叙 述 , 函 数 在 该 层 呼 叫 中 所 使 用 的 变 数 就 从 堆 叠 返 回 。
l l 递归函数之特性
1. (1) 每 次 执 行 return 叙 述,问题范围缩小
2. (2) 具有一个终止递归之条件
| 程序实例: 递归 int factorial(int j) {
|
| result : |
l l 递归函数之内部处理
1. 1. 一般函数之呼叫
2. 2. 递归函数之呼叫
| 01 | * =================================================== */ |
| 02 | /* 程序实例:使用打印数组函数说明递归函数之呼叫 */ |
| 03 | /* ================================================== */ |
| 04 |
|
| 05 | int list[6] = { 1, 2, 3, 4, 5, 6 }; /* 数组内容 */ |
| 06 |
|
| 07 | /* ----------------------------------------------------------------------------------- */ |
| 08 | /* 递归数组反向打印函数 */ |
| 09 | /* ----------------------------------------------------------------------------------- */ |
| 10 | void invert_array(int j) |
| 11 | { |
| 12 | if ( j < 6 ) /* 终止条件 */ |
| 13 | { /* 递归串行打印函数呼叫 */ |
| 14 | invert_array(j + 1); |
| 15 | printf("[%d]",list[j]); /* 打印元素数据 */ |
| 16 | } |
| 17 | } |
| 18 | /* ----------------------------------------------------------------------------------- */ |
| 19 | /* 主程序: 反向打印数组内容. */ |
| 20 | /* ----------------------------------------------------------------------------------- */ |
| 21 | void main() |
| 22 | { |
| 23 | int i; |
| 24 |
|
| 25 | printf("数组的内容:/n"); |
| 26 | for ( i= 0; i < 6 ; i++) |
| 27 | printf("[%d]",list[i]); /* 打印元素数据 */ |
| 28 | printf("/n"); /* 换行 */ |
| 29 | printf("递归打印数组的内容:/n"); |
| 30 | invert_array(0); /* 呼叫打印函数 */ |
| 31 | printf("/n"); /* 换行 */ |
| 32 | } |
| 程序实例: 费博尼西数列 long fib(int n) { if (n <=2) return (1); return (fib( n-2) + fib(n-1)); } |
Fib函数执行计算过程
本文深入探讨了C语言中的递归概念,通过实例讲解了递归函数的工作原理及其内部处理方式,包括阶乘计算和数组逆序打印等典型应用场景。
1521

被折叠的 条评论
为什么被折叠?



