当前位置:网站首页>函数递归1.0
函数递归1.0
2022-07-31 12:10:00 【林深方见鹿】
首先我们简单来认识一下什么是递归,递归就是一个过程或函数在其定义或说明中有直接或者间接调用自身的一种方法,递归的主要思考方式在于把大事化小。
递归有两个必要条件:存在限制条件,当满足限制条件时,递归便会停止;每次递归调用都会越来越接近这个限制条件。
举例1:
输入一个无符号整形数,按照顺序打印每一位数字。比如输入1234,打印1 2 3 4.
下面来展示一下我的思考过程:
如果这个数只有个位数,那么直接打印就可以了,如果大于九,就需要我们想办法来解决了,怎么解决呢?我们要得到单独的一个数字,最简单的办法就是直接除以10,然后再对10取模,就得到了单独的一位数,想到这一步,就继续想着要找到一个合适的途径去实现,递归是一种很好的方式,通过递归调用,调用到最接近限制条件,到达最底层,然后再一步步返回上一层,回到最顶层,最后得到我们想要的结果。
我们来看一下程序:
#include<stdio.h>
void print(int n)
{
if (n > 9)
print(n / 10);
printf("%d ", n%10 );
}
int main()
{
int num;
printf("请输入一个整型值:\n");
scanf("%d", &num);
print(num);
return 0;
}
运行结果:
举例2:
用递归求阶乘。
我们知道,0和1的阶乘等于1,当n大于1时,n的阶乘等于n-1的阶乘乘以n,所以我们就可以借助递归来实现求阶乘。
//求n的阶乘
#include<stdio.h>
int factorial(int n)
{
if (n <= 1)
return 1;
else
return n*factorial(n - 1);
}
int main()
{
int n = 5;
int res = factorial(n);
printf("%d \n", res);
return 0;
}
运行结果:
举例3:
求第n个斐波那契数(不考虑溢出)
//求第n个斐波那契数(不考虑溢出)
#include<stdio.h>
int fib(int n)
{
if (n <= 2)
return 1;
else
return (fib(n - 1) + fib(n - 2));
}
int main()
{
int n = 7;
int res = fib(7);
printf("%d ", res);
return 0;
}
运行结果:
通过上面的例子,我们可以得到以下结论:
递归通常把一个复杂的问题简单化,它通过层层转化,将大型复杂的问题层层转化为一个相似的较小规模的问题来求解,递归策略只需要少量的程序就可以描述出解题过程中所需要的多次重复计算,大大的减少了程序的代码量。
边栏推荐
- Detailed tutorial on distributed transaction Seata
- 一周精彩内容分享(第14期)
- [core]-ARMV7-A、ARMV8-A、ARMV9-A 架构简介「建议收藏」
- DCM 中间件家族迎来新成员
- Docker build Mysql master-slave replication
- Redis学习笔记-3.慢查询和其他高级数据结构
- Hybrid brain-computer interface system based on steady-state visual evoked potentials and attentional EEG
- CWE4.8 -- 2022年危害最大的25种软件安全问题
- 数据湖(十九):SQL API 读取Kafka数据实时写入Iceberg表
- file contains vulnerabilities
猜你喜欢
随机推荐
After class, watching the documentation and walking back to the lab, I picked up the forgotten SQL operators again
JS列表数据通过递归实现树形结构
快速学完数据库管理
列表页优化思路
A Week of Wonderful Content Sharing (Issue 14)
[Shader] Shader official example [easy to understand]
ApiPost is really fragrant and powerful, it's time to throw away Postman and Swagger
JVS轻应用的组成与配置
MySQL百万数据优化总结 一
Detailed tutorial on distributed transaction Seata
0x80070570文件或目录损坏且无法删除(0x80070091怎么删除)
R 语言data.frame 中的另一行中减去一行
am335x 看门狗驱动&看门狗应用例程序
Data Persistence Technology - MP
Initial JDBC programming
Addition logic for SAP Commerce Cloud Product Review
JVS设置不同应用的登录时效时间
JVM 运行时数据区与JMM 内存模型详解
使用docker搭建mysql主从
Basic use of dosbox [easy to understand]