函数递归.

简介: 这篇内容介绍了递归的概念,指出在C语言中递归是函数自我调用。它通过一个简单的死递归示例展示了未设置停止条件会导致栈溢出。接着,文章阐述了递归的两个必要条件:存在限制条件以终止递归,以及每次递归调用都更接近这个限制条件。随后,文章通过计算阶乘和顺序打印整数位的例子展示了递归的应用,并对比了递归和迭代的效率,强调在存在冗余计算时,迭代通常比递归更高效。

一、递归


在C语言中,递归就是函数自己调用自己


一个最简单的函数递归代码


如下:



结果为:





在屏幕上无限循环打印hehe


代码最终进入死递归,导致栈溢出


递就是递推,归就是回归

 

递归的两个必要条件:


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


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



二、递归举例


1.求n的阶乘


分析:

n!=n*(n-1)!





代码如下:




结果为:





2.顺序打印一个整数的每一位


先逆序打印 如下:





再顺序打印


思路:



代码如下:




每一次函数调用,都会向内存栈区上申请一块空间


这一块空间主要是用来存放函数的中局部变量,和函数调用过程中的上下文的信息这个一块空间一般叫:函数的运行时堆栈,也叫函数栈帧空间。


编译会自动根据需要开辟空间的!



三、递归与迭代


举例1:循环产生1-n的数字


代码如下:




举例2:求第n个斐波那契数


实际上,计算第n个斐波那契数,是不适合使用递归求解的,但是斐波那契数的问题通过是使用递归的形式描述的



这时会诱导我们将代码写成递归的形式


如下:



但是当我们n输入为50的时候,需要很长时间才能算出结果,这个计算所花费的时间,是我们很难接受的,这也说明递归的写法是非常低效的



其实递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计算,而且递归层次越深,冗余计算就会越多。

 

使用迭代的方式:





迭代的方式去实现这个代码,效率就要高出很多了。


递归和迭代的选择:

1.如果使用递归写代码,非常容易,写出的代码没问题,那就使用递归


2.如果使用递归写出的问题,是存在明显的缺陷,那就不能使用递归,得用迭代的方式处理!

目录
相关文章
|
存储 区块链 CDN
推荐几个免费好用的图床
图床一直以来都是很多人的刚性需求,无论是站长,还是平时逛论坛、写博客的用户,再或者是做外贸生意都可能需要用到图床。好用的图床提供了长期稳定存储且高访问能力的图片托管能力,这也是大家选择图床的核心因素。所以在这里我推荐几款免费且超好用的图床。
1177 0
|
SQL Oracle Java
sql文件批处理程序-java桌面应用
sql文件批处理程序-java桌面应用
142 0
|
搜索推荐 关系型数据库 MySQL
分享102个PHP源码,总有一款适合您
分享102个PHP源码,总有一款适合您
222 1
|
算法 C语言 Python
求100之内的素数
求100之内的素数
153 4
|
存储 安全 iOS开发
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类中对_lock的使用是否正确如何解决
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类中对_lock的使用是否正确如何解决
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的实用指南
【5月更文挑战第28天】 在数据驱动的时代,机器学习已成为创新的核心推动力。本文旨在提供一套实用的指导方案,帮助读者构建出既高效又准确的机器学习模型。我们将深入探讨数据预处理的重要性、选择合适的算法框架、调优技巧以及模型评估方法。通过这些步骤,读者能够更好地理解并应对机器学习项目开发过程中可能遇到的挑战。
|
JSON 数据格式 Python
Python实战系列<一> | 正则提取数据并绘图
Python实战系列<一> | 正则提取数据并绘图
|
存储 弹性计算 安全
阿里云刘强:无影云电脑构建云上安全办公室
无影云电脑提供触手可及的算力,在云办公、外企办公、分支机构办公、软件开发、人力外包等场景构建云上安全办公室。
阿里云刘强:无影云电脑构建云上安全办公室
对‘avformat_find_stream_info’未定义的引用、to the PKG_CONFIG_PATH environment variable
对‘avformat_find_stream_info’未定义的引用、to the PKG_CONFIG_PATH environment variable
131 0
|
设计模式 算法 前端开发
java设计模式之行为型设计模式
java设计模式之行为型设计模式
141 0
java设计模式之行为型设计模式