C语言 - 函数:递归函数
递归
1 - 递归:就是在运行的过程中自己调用自己。每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出
2 - 构成递归需具备的条件
① 子问题须与原始问题为同样的事,且更为简单
② 不能无限制地调用本身,必须有个出口
3 - 代码示例
① 递归原理
1 #include <stdio.h> 2 int print_i(int i){ 3 4 if(i > 0){ 5 printf("i = %d \n",i); // 先序递归:顺序执行 6 print_i(i - 1);// 回调自身 7 printf("i == %d \n",i); // 后序递归:一层层地由里向外退出,逆序执行 8 } 9 10 return i; 11 } 12 13 int main(int argc, const char * argv[]) { 14 15 int a = 5; 16 printf("函数返回值:%d\n",print_i(a)); 17 return 0; 18 }
日志打印
② 有一 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 }
递归流程
③ 计算 1-10 的和
1 #include <stdio.h> 2 3 4 int sumNumber(int x){ 5 6 if (x > 1) { 7 printf("%d、 ",x); 8 return x+sumNumber(x-1); 9 10 } 11 printf("---%d\n",x); 12 return 1; 13 } 14 15 16 int main(int argc, const char * argv[]) { 17 18 printf("\n结果是%d\n",sumNumber(10)); 19 return 0; 20 }
日志打印
那么如何计算 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 }
④ 计算字符串长度
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 }