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

网页设计班级网站用什么做首页福州百度首页优化

网页设计班级网站用什么做首页,福州百度首页优化,建设网站目的,彩页设计画面元素一、递归概念 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。下面举一个例子: 上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终…

一、递归概念

递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。下面举一个例子:

上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终也会陷⼊死递归,导致栈溢出(Stack overflow)。

递归的思想:把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。递归中的递就是递推的意思,归就是回归的意思。

二、递归的限制条件

递归在书写的时候,有2个必要条件:

• 递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。

• 每次递归调⽤之后越来越接近这个限制条件。

三、递归举例

(3.1)求n的阶乘

计算n的阶乘(不考虑溢出),n的阶乘就是1~n的数字累积相乘。

(3.1.1)分析和代码实现

首先我们要知道n的阶乘的公式:n! = n ∗ (n − 1)! 

例如:

这样的思路就是把⼀个较⼤的问题,转换为⼀个与原问题相似,但规模较⼩的问题来求解的。通过上图继续分析:(假设求4的阶乘)

当n<=1时,n的阶乘是1,其余n的阶乘都是可以通过上述公式进行拆分计算。

因此,n的阶乘的递归公式如下:

那我们就可以写出函数Fact求n的阶乘,假设Fact(n)就是求n的阶乘,那么Fact(n-1)就是求n-1的阶乘,函数如下:

测试:

(3.1.2)画图推演

(3.2)顺序打印一个整数的每一位

输⼊⼀个整数m,按照顺序打印整数的每⼀位。例如:

(3.2.1)分析和代码实现

如果n是⼀位数,n的每⼀位就是n自己。
n是超过1位数的话,就得拆分每⼀位。例如:1234%10就能得到4,然后1234/10得到123,这就相当于去掉了4然后继续对123%10,就得到了3,再除10去掉3,以此类推。不断的 %10 和 \10 操作,直到1234的每⼀位都得到;但是这⾥有个问题就是得到的数字顺序是倒着的。我们发现⼀个数字的最低位是最容易得到的,通过%10就能得到,那我们假设写⼀个函数Print来打印n的每⼀位,如下表⽰:

直到被打印的数字变成⼀位数的时候,就不需要再拆分,递归结束。代码如下:

测试:

在这个解题的过程中,我们就是使⽤了⼤事化⼩的思路(以1234为例)把Print(1234)打印1234每⼀位,拆解为⾸先Print(123)打印123的每⼀位,再打印得到4,Print(123)打印123每⼀位,拆解为⾸先Print(12)打印12的每⼀位,再打印得到的3,直到Print打印的是⼀位数,直接打印就⾏。

(3.2.2)画图推演

以1234每⼀位的打印来推演⼀下。

四、递归和迭代

在C语⾔中每⼀次函数调⽤,都要需要为本次函数调⽤在栈区申请⼀块内存空间来保存函数调⽤期间的各种局部变量的值,这块空间被称为运⾏时堆栈,或者函数栈帧。函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。所以如果采⽤函数递归的⽅式完成代码,递归层次太深,就会浪费太多的栈帧空间引起栈溢出(stack overflow)的问题。

所以如果不想使⽤递归就得想其他的办法,通常就是迭代的⽅式(通常就是循环的⽅式)。

⽐如:计算n的阶乘。

事实上,我们看到的许多问题是以递归的形式进⾏解释的,这只是因为它⽐⾮递归的形式更加清晰,但是这些问题的迭代实现往往⽐递归实现效率更⾼。
当⼀个问题⾮常复杂,难以使⽤迭代的⽅式实现时,此时递归实现的简洁性便可以补偿它所带来的运⾏时开销。

例如:求第n个斐波那契数

注:斐波那契数列第一项和第二项都是1,后面每一项等于前两项相加。

假设我们写了一个Fib函数求第n个斐波那契数列,那么根据斐波那契数列的性质可以得到以下公式:

看到这公式,我们很容易就能写出递归形式的代码:

测试:

当我们n输⼊为50的时候,需要很⻓时间才能算出结果,这个计算所花费的时间,是我们很难接受的,这也说明递归的写法是⾮常低效的,那是为什么呢?其实递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计算,⽽且递归层次越深,冗余计算就会越多。如图:

我们可以写代码统计一下第三个斐波那契数被计算的次数。

这⾥我们看到了,在计算第40个斐波那契数的时候,使⽤递归⽅式,第3个斐波那契数就被重复计算了39088169次,这些计算是⾮常冗余的。所以斐波那契数的计算,使⽤递归是⾮常不明智的,我们就得想迭代的⽅式解决。我们知道斐波那契数的前2个数都1,然后前2个数相加就是第3个数,那么我们从前往后,从⼩到⼤计算就⾏了。代码如下:

解释:我们可以把a看成是第一个斐波那契数,b看成是第二个斐波那契数,c是要求的第n个斐波那契数,因为前两个斐波那契数没有必要求,所以求第三个及之后的斐波那契数需要累加n-2次,所以循环条件是n>2且每次n--。令a = b,b = c,是为了每次进入循环时,a,b分别为第n个斐波那契数的前2项和前1项。

五、拓展问题

青蛙跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。如图所示:

思路:由题可知,当n等于1时,只有一种跳法,当n等于2时,有两种跳法。假设我们写一个climbStairs函数用来求青蛙跳上一个n级台阶有多少种跳法,那么当n大于等于3时,第一次跳有两种情况,如果第一次跳了一步,那么后面的台阶就有climbStairs(n-1)种方法,如果第一次跳了两步,那么后面的台阶就有climbStairs(n-2)种方法。由此我们可以得到公式:

代码为:

测试:

http://www.hkea.cn/news/796302/

相关文章:

  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名
  • 怎么选择无锡网站建设虚拟主机搭建网站
  • 做原油期货关注什么网站搜索引擎优化是做什么
  • 微信小程序怎么制作游戏安卓优化清理大师
  • 胶南做网站初学者做电商怎么入手
  • 网站为什么要维护佛山网络营销推广
  • 国企网站建设报告怎么建造自己的网站
  • 免费做司考真题的网站余姚网站如何进行优化
  • 如何网站开发1688网站
  • 丽水专业网站建设价格青岛网站优化
  • 网站开发专业培训学校百度推广登录官网入口
  • 贵阳做网站公司网站热度查询
  • 做课件最好的素材网站考拉seo
  • 网站建设玖首选金手指seo网站优化收藏
  • 台州卓远做网站好不好广州seo教程
  • dz网站数据备份bt磁力猪
  • github 可以做网站吗360seo
  • 杭州 企业门户网站建设爱链
  • dj那个网站做的好长沙公司网络营销推广
  • 设计师培训招生视频黑帽seo联系方式
  • 做网上贸易哪个网站好西宁网站seo
  • 电子烟网站建设杯子软文营销300字
  • 广州企业网站制作怎么做营销推广
  • 网站建设服务器在香港郑州网站建设专业乐云seo
  • 河北建设工程交易信息网海口关键词优化报价
  • 全国网站建设公司有多少家微信朋友圈广告投放收费标准
  • 免费做网站公司黑帽seo排名技术