首页 > 其他分享 >C语言初阶(6)

C语言初阶(6)

时间:2024-07-27 22:25:08浏览次数:15  
标签:初阶 函数 迭代 条件 C语言 递归 调用 使用

1.函数递归定义

程序调用自身的编程技巧称为递归。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解, 递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于:把大事化小

函数递归实际上是一种思想方法,是将函数重复调用自身的操作。需要我们不断练习。

2.函数递归的条件

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

(2)每次递归调用之后越来越接近这个限制条件。

如果不存在限制条件和不接近限制条件就会实现死递归的情况的出现,也就是栈溢出的情况,通俗点就是内存不够用了。

3.函数递归的例子

(1)接受一个整型值(无符号),按照顺序打印它的每一位。

以下就利用函数递归的思想实现了按顺序打印 他的每一位。可以描述成这样的示意图,-

但是只要表示成类似这种形式就能递归 

(2)编写函数不允许创建临时变量,求字符串的长度

在忽略条件时我们可以使用以下代码来编写

同样的,我们也可以使用递归的方法来

根据上面所说,我们可以同样也能使用来表示。 

因此我们只要列出上面类似于分段数列的形式就能实现递归,在上面求n!的方式就使用了数列中的递推公式。所以我们只要发现解决问题的部分共性,从而得到递推公式,在区分不同情况,做到递归的两个必要条件,就能实现递归。

 4. 递归与迭代

先介绍两个例子

求n的阶乘。

求第n个求第n个斐波那契数。

迭代就是一种类似循环的思想。

上面斐波那契数当使用递归时计算会变得极其复杂,如果我们使用迭代的方法来进行计算就会变得方便快捷迅速。

因此,递归与迭代是两个相互互补的两种思想。

下面介绍一些解决栈溢出的办法:

1. 将递归改写成非递归。

2. 使用static对象替代 nonstatic 局部对象。在递归函数设计中,可以使用 nonstatic 局部对象(即栈对象),这不 仅可以减少每次递归调用和返回时产生和释放 存递归调用的中间状态,并且可为 各个调用层所访问。

标签:初阶,函数,迭代,条件,C语言,递归,调用,使用
From: https://blog.csdn.net/2401_86372508/article/details/140725182

相关文章

  • 15.C语言形式参数和实际参数的介绍及函数总结
    形参和实参的介绍及函数总结1.形式参数和实际参数2.获取两个最大的数3.关于函数的一些总结1.形式参数和实际参数实际参数可以是常量、变量、表达式y=get(1);//常量y=get(x);//变量y=get(x+1);//表达式形参和实参数值相同,地址不同(传递参数是数值的传递......
  • 【C++第九章】初阶模板
    C++模板初阶模板介绍......
  • C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
    写在最前,一篇文章学会C语言指针顶级重要,学习C语言最重要的一部分-------指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针文章目录写在最前,一篇文章学会C语言指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针1.指针变量1.1指针变......
  • C语言的函数递归
    一、递归的意义所谓函数递归,就是在某个函数中再次调用这个函数本身,做到函数自己调用自己,这个就是函数的递归。而函数的递归主要是的作用是将一个本身比较复杂,并且步骤繁多的函数逐次的递归使其变得简单化,就比如剥笋:我们想要得到里面能吃的部分,就需要剥笋。而笋的皮有很多层,每......
  • 入门C语言Day18——break&continue&goto语句
    前面的博文中有提到do-while与for循环语句,其中的流程图中有break和continue这两个部分还没解释。所以今天先来解释一下break与continue语句。break和continue两个关键字都被运用在循环中。break的作用是永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。......
  • 写一个函数返回参数二进制中1的个数(c语言)
    1.int一共有32位,我们要知道一个数取余2等于1(n%2==1),就可以得到二进制中1的个数.然后一个数除于2(n=n/2),就可以使32位向右一位(例如:5为101,5/2==2,2为10,)。方法1(不可以输入负数)//写一个函数返回参数二进制中1的个数//方法1intcount(intn,intz){ //当a为正数的 if(n>......
  • 调整奇数全部位于偶数前面(c语言)
    1.方法一:第一步先建一个arr,判断arr中的奇数(arr[i]%2!=0)和偶数(arr[i]%2==0)分别打印,先打印奇数,后打印偶数。//调整奇数全部位于偶数前面//方法一voidtest(int*arr,intsz){ inti=0; for(i=0;i<sz-1;i++) { if(arr[i]%2!=0) { printf("%d......
  • 简单的扫雷——基于C语言的控制台小游戏
    前言:  “将大象装进冰箱要几步?--打开冰箱,把大象放进去,关上冰箱。”  同样的,该扫雷游戏的编写过程也只需三步:逻辑梳理-代码实现-运行调试。本文将使用C语言来一步步剖析并完成扫雷这一案例。一.扫雷的游戏逻辑  该扫雷的游戏逻辑为:  1.生成棋盘,并布置数个......
  • 《重生到现代之从零开始的C语言生活》—— 分支和循环
    前言:因为C语言是结构化的程序设计语言,这里面的结构指的是顺序结构,选择结构,循环结构,在日常生活中,所见的事都能拆分成这几个结构或者这三种结构的组合。if语句ifif在英文中有如果的意思,在C语言中意思相似if(表达式)要执行的语句如果表达式成立(为真),则执行语句,如果不......
  • 【C++初阶】vector
    【C++初阶】vector......