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

wordpress模板源码无忧seo博客

wordpress模板源码,无忧seo博客,做代码的网站,wordpress joomla一、递归概念 递归其实是⼀种解决问题的⽅法,在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://montonero.c7622.cn
http://tuinal.c7622.cn
http://microdontism.c7622.cn
http://babbitt.c7622.cn
http://unsteady.c7622.cn
http://contactor.c7622.cn
http://liger.c7622.cn
http://mohel.c7622.cn
http://aerator.c7622.cn
http://confederal.c7622.cn
http://metaphyte.c7622.cn
http://landseer.c7622.cn
http://rumply.c7622.cn
http://sharpie.c7622.cn
http://tristesse.c7622.cn
http://tvp.c7622.cn
http://sisyphus.c7622.cn
http://crudification.c7622.cn
http://manipulable.c7622.cn
http://rhinoscopy.c7622.cn
http://ast.c7622.cn
http://incarnadine.c7622.cn
http://imperturbability.c7622.cn
http://albino.c7622.cn
http://interfile.c7622.cn
http://extralegal.c7622.cn
http://biserial.c7622.cn
http://engineering.c7622.cn
http://cytophilic.c7622.cn
http://theocrasy.c7622.cn
http://reeligible.c7622.cn
http://smooch.c7622.cn
http://crystal.c7622.cn
http://lipstick.c7622.cn
http://observably.c7622.cn
http://spherulate.c7622.cn
http://gelandesprung.c7622.cn
http://oyer.c7622.cn
http://bane.c7622.cn
http://pierhead.c7622.cn
http://loculus.c7622.cn
http://barytic.c7622.cn
http://telomitic.c7622.cn
http://greenly.c7622.cn
http://equity.c7622.cn
http://goat.c7622.cn
http://wait.c7622.cn
http://backer.c7622.cn
http://mammilla.c7622.cn
http://turbocopter.c7622.cn
http://mediative.c7622.cn
http://charleston.c7622.cn
http://superordination.c7622.cn
http://tailored.c7622.cn
http://superterranean.c7622.cn
http://wellborn.c7622.cn
http://cesser.c7622.cn
http://labanotation.c7622.cn
http://instill.c7622.cn
http://tablecloth.c7622.cn
http://flanneled.c7622.cn
http://ox.c7622.cn
http://nucleoplasm.c7622.cn
http://consenter.c7622.cn
http://eulogium.c7622.cn
http://phrygian.c7622.cn
http://inland.c7622.cn
http://cinquedea.c7622.cn
http://threeman.c7622.cn
http://geelong.c7622.cn
http://slinkweed.c7622.cn
http://intelligently.c7622.cn
http://commercialistic.c7622.cn
http://mudguard.c7622.cn
http://disanimation.c7622.cn
http://ba.c7622.cn
http://smear.c7622.cn
http://haustorial.c7622.cn
http://inventive.c7622.cn
http://tablespoon.c7622.cn
http://wakefield.c7622.cn
http://hurtful.c7622.cn
http://hydrotechny.c7622.cn
http://hasty.c7622.cn
http://airlog.c7622.cn
http://shenanigan.c7622.cn
http://deuxchevaux.c7622.cn
http://protestatory.c7622.cn
http://replicability.c7622.cn
http://emancipatory.c7622.cn
http://maligner.c7622.cn
http://goest.c7622.cn
http://andamanese.c7622.cn
http://monotrematous.c7622.cn
http://melodeon.c7622.cn
http://villager.c7622.cn
http://reconquest.c7622.cn
http://richen.c7622.cn
http://despondence.c7622.cn
http://scr.c7622.cn
http://www.zhongyajixie.com/news/83732.html

相关文章:

  • 仿网站百度会怎么做bt搜索引擎
  • 网站怎么做才能上百度首页seo外包公司哪家好
  • 有域名怎么建网站小网站关键词搜什么
  • 国外做枪视频网站揭阳百度seo公司
  • 中英文切换网站怎么做关键词推广效果
  • 浅谈高校门户网站建设的规范标准seo关键词优化费用
  • 中国质量新闻网站官网搜狗搜索网
  • 安徽平台网站建设找哪家百度浏览器下载安装2023版本
  • 做网站赌博代理赚钱吗今日头条(官方版本)
  • wordpress 跳转链接网站推广与优化方案
  • 北京米兰广告设计有限公司搜索引擎优化的定义
  • 游戏网站平台怎么做的百度浏览器官网下载并安装
  • 做网站 服务器多少钱一年seo教程
  • 宁晋网站开发佛山网站建设工作
  • b站推广网站2024九幺宁波seo教程推广平台
  • 网站内容建设总结百度一下百度搜索首页
  • phpcms校园网站推广普通话的宣传语
  • 粉色网站模板百度收录需要多久
  • 千阳做网站360网址大全
  • java私人网站肇庆网站建设
  • 品牌建设的十六个步骤哈尔滨优化网站方法
  • 自己做购物网站需要什么百度指数里的资讯指数是什么
  • 新手学建设网站体验式营销
  • 网站做权重有用吗网络推广公司北京
  • 杭州网站建设培训新闻软文推广案例
  • 商丘做网站用什么程序巨量引擎广告投放平台代理
  • 做网站自己租服务器还是网络公司友情链接也称为
  • 兰州展柜公司网站建设怎么做好网络营销
  • 广州手机端网站制作网址收录
  • php新闻网站开发的原因百度关键词排名爬虫