C语言 - 函数:递归函数
■ 递归
递归概念:就是在运行的过程中自己调用自己。每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出
构成递归需具备的条件
1. 子问题须与原始问题为同样的事,且更为简单
2. 不能无限制地调用本身,必须有个出口
递归原理:先看代码
1 #include <stdio.h> 2 3 int print_i(int i) { 4 5 // 递归终止条件:当 i <= 0 时,不再进入 if 块,直接返回 6 if (i > 0) { 7 8 // 【先序操作】在递归调用之前执行 9 // 特点:随着递归深入,i 的值依次减小,所以是正序打印 (5, 4, 3, 2, 1) 10 printf("i = %d \n", i); 11 12 // 【递归调用】进入下一层递归,参数为 i-1 13 // 程序会在这里暂停当前层的后续代码,直到深层递归全部结束并返回 14 print_i(i - 1); 15 16 // 【后序操作】在递归调用返回之后执行 17 // 特点:只有当深层递归完全结束后,才会执行这一行。 18 // 执行顺序是从最深层(i=1)开始,层层向外回溯,所以是逆序打印 (1, 2, 3, 4, 5) 19 printf("i == %d \n", i); 20 } 21 22 // 返回当前层的 i 值 23 return i; 24 } 25 26 int main(int argc, const char * argv[]) { 27 28 int a = 5; 29 30 // 调用递归函数并打印其返回值 31 // 注意:print_i 函数最终返回的是最初传入的 a 的值(即 5) 32 printf("函数返回值:%d\n", print_i(a)); 33 34 return 0; 35 }
日志信息

代码示例:递归函数
1. 有一 4 个学生,已知最小年龄是 10 岁,后面学生的年龄依次比前面的大 2 岁,求最大年龄
1 int ageStudent(int n){ 2 3 if (n == 1) { 4 return 10;// 第一个人年龄是 10 岁 5 }else{ 6 return ageStudent(n-1)+2;// 前一个人总是比后一个人大 2 岁 7 } 8 }
1 int main(int argc, const char * argv[]) { 2 3 int num = 4; 4 printf("第 %d 个学生的年龄是 %d\n",num,ageStudent(num)); // 16 岁 5 return 0; 6 }
递归流程

2. 计算 1-10 的和
1 #include <stdio.h> 2 3 int sumNumber(int x){ 4 5 if (x > 1) { 6 7 printf("%d、 ",x); 8 return x+sumNumber(x-1); 9 } 10 printf("---%d\n",x); 11 return 1; 12 } 13 14 int main(int argc, const char * argv[]) { 15 16 printf("\n结果是%d\n",sumNumber(10)); 17 return 0; 18 }
日志信息

3. 计算 n - m 的和
1 // @n 首 2 // @m 尾 3 int sumNumer(int n,int m){ 4 5 if (n < m) { 6 7 return sumNumer(n +1,m)+n; 8 }else{ 9 10 return m; 11 } 12 13 }
4. 计算字符串长度
1 int lenghtOfString(char array[],int count){ 2 3 if (array[count]) { 4 5 return lenghtOfString(array, count+1); 6 } 7 8 return count; 9 } 10 11 int main(int argc, const char * argv[]) { 12 13 printf("%d\n",lenghtOfString("hello", 0)); // 输出 5 14 15 return 0; 16 }
浙公网安备 33010602011771号