当前位置: 首页 > news >正文

static 用法,函数递归与迭代详解

一、static的用法:1、修饰局部变量 2、修饰全局变量 3、修饰函数

1、修饰局部变量:改变了变量的生命周期,生命周期的改变的本质是改变了变量的存储类型,本来局部变量是存储在内存的栈区的,但是被static修饰后储存在静态区。存储在静态区的变量和全局变量是一样的,生命周期和程序的生命周期一样了,只有程序结束,变量才销毁,内存才回收,但是作用域是不变的。

2、static修饰全局变量:

全局变量是默认的带有外部链接属性。static修饰全局变量的时候,改变了全局变量的链接属性;使得外部链接属性变成内部连接属性。这种变量只能在自己所在的 .c(源文件)文件中使用,其他.c文件无法使用。

如果一个全局变量,只想在所在的源文件内部使用,不想被其他文件发现,就可以使用static修饰。

3、static修饰函数(和static修饰全局变量类似):函数也是具有外部链接属性,只要在其他的.c文件中正确的声明也是可以使用的,static修饰函数,让函数的外部链接属性变成内部链接属性,使函数只能在自己所在的.c文件中使用,其他的.c文件无法使用。

二、函数递归

什么是函数递归呢?函数递归就是函数自己调用自己,如果函数无限递归下去,就会出现栈溢出的错误。每一次函数调用,都要为这次函数调用分配内存空间,是内存的栈区上分配的,如果无限的递归调用函数,就会将栈区空间填满(使用完),这时就出现了栈溢出的现象。

递归思想:把大型复杂的问题层层转化为与一个原问题相似,但是规模较小的子问题来求解,直到子问题不能被拆分,递归就结束了,所以递归的思考方式是把大事化小小事化了了过程。

递归递归:简而言之‘递’就是递推,‘归’就是回归的意思。

举例如下:求n的阶乘:

主要思路是:

代码的表达是:如下图:5的阶乘是120

图四是整个流程:

举例二:顺序打印一个整数的每一位:

输入一个整数m,按照顺序打印整数的每一位。

思维导图:

结果为:但是题目是要顺序打印每一位但是结果是这样的? 有没有可以解决的办法呢?

答案当然是有的!!!其实只需要稍微修改一下代码就可以了。

思维导图:

如果不想使用递归可以使用迭代的方法:迭代的其中一种叫循环,迭代不仅仅只是包括循环。如

下:

举例3:斐波那契数列:数列从第0项或者第1项开始,后续每一项均为前俩项之和。

很容易就写下如图的递归求斐波那契数列,斐波那契数列是不合适用递归的,但是要通过使用递归的形式来描述的。

用迭代的方法:

到这里递归就结束了

今天就给大家分享到这里,我们下期在见!!!

如有不足,请多多指正。

相关文章:

  • Spring Cloud之远程调用OpenFeign参数传递
  • Unity单例模式更新金币数据
  • CI/CD—Jenkins配置Poll SCM触发自动构建
  • DETR详解
  • 基于SpringBoot实现旅游酒店平台功能六
  • 【C#学习笔记02】基本元素与数据类型
  • mac本地部署Qwq-32b记录
  • 供应链工作效率如何提升
  • Java常见面试技术点整理讲解——后端框架(整理中,未完成)
  • 什么是一致性模型,在实践中如何选择?
  • 程序化广告行业(3/89):深度剖析行业知识与数据处理实践
  • MOM成功实施分享(七)电力电容制造MOM工艺分析与解决方案(第二部分)
  • 菜鸟打印机组件安装后重启显示“Windows 找不到文件‘CNPrintClient,exe‘。请确定文件名是否正确后,再试一次。”的正确解决方案
  • JavaScript性能优化:DOM操作优化实战
  • 2025-03-10 吴恩达机器学习1——机器学习概述
  • Python的函数
  • OpenPLC WebSever启动
  • kali linux 漏洞扫描
  • 关于原码、反码、补码、移码
  • 【亲测可行】rk3588交叉编译opencv-4.5.1,ffmpeg-4.2.9,x264
  • 韩国第二大轮胎制造商因火灾停产,或影响700万条轮胎销售
  • 财政部:鼓励政策性银行对符合条件的城市更新项目提供支持
  • 外汇局:4月下旬外资投资境内股票转为净买入
  • 今晚油价下调,加满一箱油将省9元
  • 83岁山水花鸟画家、书法家吴静山离世,系岭南画派代表人物
  • 北斗系统全面进入11个国际组织的标准体系