当前位置:网站首页>函数递归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;
}运行结果:

通过上面的例子,我们可以得到以下结论:
递归通常把一个复杂的问题简单化,它通过层层转化,将大型复杂的问题层层转化为一个相似的较小规模的问题来求解,递归策略只需要少量的程序就可以描述出解题过程中所需要的多次重复计算,大大的减少了程序的代码量。
边栏推荐
- A Week of Wonderful Content Sharing (Issue 14)
- B/S架构模式的一个整体执行流程
- 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
- Exploring Plain Vision Transformer Backbones for Object Detection Paper Reading Notes
- 这款悄然崛起的国产API接口管理工具,你一定要晓得
- Three-Phase PWM Rectifier Predictive Direct Power Control
- 生信周刊第38期
- 基于生物激励神经网络的室内实时激光SLAM控制方法
- 订song餐系统
- mysql根据多字段分组——group by带两个或多个参数
猜你喜欢

St. Regis Takeaway Project: New dishes and dishes paged query

Docker practical experience: Deploy mysql8 master-slave replication on Docker

这款悄然崛起的国产API接口管理工具,你一定要晓得

chroot命令

Mysql环境变量的配置(详细图解)

消息队列面试题(2022最新整理)
给你一个大厂面试的机会,你能面试上吗?进来看看!

Candence学习篇(11) allegro中设置规则,布局,走线,铺铜

The latest MySql installation teaching, very detailed

Exploring Plain Vision Transformer Backbones for Object Detection 论文阅读笔记
随机推荐
ApiPost is really fragrant and powerful, it's time to throw away Postman and Swagger
B/S架构模式的一个整体执行流程
消息队列面试题(2022最新整理)
【Shader】Shader官方示例[通俗易懂]
MySQL百万数据优化总结 一
SAP Commerce Cloud Product Review 的添加逻辑
Spark GC日志分析
Docker实践经验:Docker 上部署 mysql8 主从复制
科学论文和学术论文写作
imx6ull看门狗使用
Build a Valentine's Day confession website (super detailed process, package teaching package)
Comparison of ipv4 and ipv6 (IPV4)
Acwing第 62 场周赛【未完结】
Shengxin Weekly Issue 38
CWE4.8 -- 2022年危害最大的25种软件安全问题
Initial JDBC programming
带有对称约束切换线性系统的结构可控性
基于C51实现按键控制
Exploring Plain Vision Transformer Backbones for Object Detection 论文阅读笔记
数据湖(十九):SQL API 读取Kafka数据实时写入Iceberg表