糊里糊涂的递归和递归经典题(上)

简介: 糊里糊涂的递归和递归经典题

🐲前言+目录:

递归是C语言中非常重要的知识点,其中的大事化小等思想对初学C语言的小伙伴来说不是很友好,因此我整理了递归的经典题目并向外拓展,给你全面的介绍,重新认识递归🌍🌎


🐲递归知识点:

递归概念:程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解, 递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

🔥通俗理解就是:函数自己调用自己

🔥递归的主要思考方式就是大事化小

 

递归的两个必要条件

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续

2.每次递归调用之后越来越接近这个限制条件

(满足以上必要条件的不一定是递归,但不满足条件的一定不是递归)


🐲上题:

第一题:

接收一个整型数值,按照顺序打印它的每一位

输入:1234          输出:1 2 3 4

来看看函数内部:

 

1. #include <stdio.h>
2. 
3. void print(int n)
4. {
5.  if (n > 9)
6.  {
7.    print(n / 10);
8.  }
9.  printf("%d ", n % 10);
10. }
11. int main()
12. {
13.   int n = 0;
14.   scanf("%d", &n);
15.   print(n);
16. 
17.   return 0;
18. }

第二题:

求 n 的阶乘

进入函数内部:

 

1. #include <stdio.h>
2. 
3. int factorial(int n)
4. {
5.  if (n <= 1)
6.    return 1;
7.  else
8.    return n * factorial(n - 1);
9. }
10. 
11. int main()
12. {
13.   int n = 0;
14.   scanf("%d", &n);
15.   int ret = factorial(n);
16.   printf("%d\n", ret);
17. 
18.   return 0;
19. }

 

第三题:

用递归的方法求字符串长度

 

1. #include <stdio.h>
2. 
3. int my_strlen(char* str)
4. {
5.  if (*str == '\0')
6.    return 0;
7.  else
8.    return 1 + my_strlen(str + 1);
9. 
10. }
11. int main()
12. {
13.   char arr[] = "hello";
14.   int ret = my_strlen(arr);
15.   printf("%d\n", ret);
16. 
17.   return 0;
18. }

 

第四题:

用递归求第n个斐波那契数(不考虑溢出)

进入函数内部:

 

1. #include <stdio.h>
2. 
3. int Fib(int n)
4. {
5.  if (n <= 2)
6.    return 1;
7.  else
8.    return Fib(n - 1) + Fib(n - 2);
9. }
10. 
11. int main()
12. {
13.   int n = 0;
14.   scanf("%d", &n);
15.   int ret = Fib(n);
16.   printf("%d\n", ret);
17. 
18.   return 0;
19. }


相关文章
|
机器学习/深度学习 运维
Moment:又一个开源的时间序列基础模型
MOMENT团队推出Time-series Pile,一个大型公共时间序列数据集,用于预训练首个开源时间序列模型家族。模型基于Transformer,采用遮蔽预训练技术,适用于预测、分类、异常检测和输入任务。研究发现,随机初始化比使用语言模型权重更有效,且直接预训练的模型表现出色。MOMENT改进了Transformer架构,调整了Layer norm并引入关系位置嵌入。模型在长期预测和异常检测中表现优异,但对于数值预测的效果尚不明朗。论文贡献包括开源方法、数据集创建和资源有限情况下的性能评估框架。
989 0
|
5月前
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
阿里云PolarDB凭借全球首创基于CXL Switch的分布式内存池技术,在SIGMOD 2025上荣获工业赛道“最佳论文奖”,连续两年蝉联该顶会最高奖项。其创新架构PolarCXLMem打破传统RDMA技术瓶颈,性能提升2.1倍,并已落地应用于内存池化场景,推动大模型推理与多模态存储发展,展现CXL Switch在高速互联中的巨大潜力。
阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
|
11月前
|
存储 机器学习/深度学习 人工智能
Memory Layers:如何在不增加算力成本的情况下扩大模型的参数容量?Meta 开源解决方法
Meta 开源的 Memory Layers 技术,通过键值查找机制扩展大模型参数,显著提升模型性能,尤其适用于事实性任务。
252 10
Memory Layers:如何在不增加算力成本的情况下扩大模型的参数容量?Meta 开源解决方法
|
10月前
|
弹性计算 JSON 安全
阿里云服务器产品评测报告
阿里云服务器安全体检与漏洞修复
|
算法
串ababaaababaa的next和串ababaabab的nextval
本文介绍了计算字符串的next数组和nextval数组的方法,通过分析两个具体的例子来展示如何计算这些数组,这些数组通常用于KMP算法中。
785 0
串ababaaababaa的next和串ababaabab的nextval
|
存储
全局变量和局部变量在堆和栈的区别
全局变量和局部变量在堆和栈的区别
1000 0
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之如何实现MySQL的实时增量同步
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
290 6
|
算法 C语言
【C语言】——函数--递归及习题练习
【C语言】——函数--递归及习题练习
|
存储 算法 搜索推荐
八大排序算法——(万字图文详解)
八大排序算法——(万字图文详解)