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 }

 

posted on 2017-08-02 14:57  低头捡石頭  阅读(17)  评论(0编辑  收藏  举报

导航