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

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

🐲前言+目录:

递归是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. }


相关文章
|
6月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
155 0
|
9月前
|
算法 C#
C#递归详解
C#递归详解
86 0
糊里糊涂的递归和递归经典题(下)
糊里糊涂的递归和递归经典题(下)
认识了解递归的原理,学会递归的运用
认识了解递归的原理,学会递归的运用
|
存储 算法 C++
递归的应用
递归的应用
|
Java 数据安全/隐私保护 决策智能
字符串全排列(递归)
字符串全排列,递归的应用
175 0
|
算法 Python
递归的使用
递归的使用
61 0
|
存储 Serverless 开发者
递归的理解与实现
递归的理解与实现
递归的理解与实现