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   低头捡石頭  阅读(19)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示