问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

计算机中的递归思想4

发布网友 发布时间:2024-03-04 06:47

我来回答

4个回答

热心网友 时间:2024-04-09 07:22

简单谈谈C++ 递归的思想实现以及和循环的关系  文/ 出处:it.com.cn   很多初学者往往对递归迷惑不解,也在这上面花了不少的时间。其实教材上的例子很经典,只是它说的有一些唠叨了。初学者会看的头大的。编程是解决问题的,而现实中很多的问题都是比较简单的,没有象汉诺塔那么复杂。我们也不必追究递归到底是怎样实现的,我们只是要会用递归,会用递归来为我们解决一些问题,这就行了。

  首先来看一个例子:

  有一个Febonacci序列:

  1,1,2,3,5,8,13,,21,34........

  它的问题是:求这个序列中的第N个数。

  由于它的函数原形是:f(n)=f(n-1)+f(n-2)

  这用递归很容易就可以写出代码来,一点都不费事:

  int Febc(int n) {

  if(n<3) return (1);

  else

  return (Febc(n-1)+Febc(n-2));

  }

  噢~~~~~也许你会说递归真是太简单了,简直就是一个数学模型嘛,呵呵。

  其实,递归函数的工作过程就是自己调用自己。有一些问题用递归就很容易解决,简单的你自己都会吃惊。

  我们做事情,一般都是从头开始的,而递归却是从末尾开始的。比如上面的函数吧,当n>3时,它显然只能求助于n-1,n-2。而(n-1)>2,(n-2)>2时,它们就求助于:(n-1)-1,(n-1)-2;(n-2)-1,(n-2)-2;然后··············直到(n-k)<3,(n-k-1)<3时,函数Febc终于有了返回值1 了,它再从头开始计算,然后一直算到n 为止。

  通过上面的例子,我们知道递归一定要有一个停止的条件,否则递归就不知道停止了。在上面的例子中, if(n<3) return (1); 就是停止的条件。

  然而,使用递归的代价是十分巨大的:它会消耗大量的内存!!递归循环时它用的是堆栈,而堆栈的资源是十分有限的。上面的例子你只能用一个很小的n值。如果n=20,即Febc(20)的话,它将调用Febc(n)函数10000多次!!!而上面一个例子用循环也是十分容易写的:

  /*using turboc2*/
  int febc(int);
  main()
  {
  int n;
  scanf("%d",&n);
  febc(n);
  }

  int febc(int n)
  {
  int a[3],i;
  a[0]=a[1]=a[2]=1;
  for(i=3;i<=n;i++)
  a[i%3]=a[(i+1)%3]+a[(i+2)%3]; /*实现 Febc(i)=Febc(i-1)+Febc(i-2)*/
  printf("\n%d\n",a[n%3]);
  }

  有兴趣者不妨输入一个较大的n值,然后比较比较这二个函数计算的速度。当然, 如果你使用的n太大的话,递归可能发生错误。如果死机了可别骂我哦~~~ 我已经提醒过你了 :)

  现在我们再来看看一个求从1 加到100的循环:

  /*turboc2*/

  main()

  { int i,n;

  for(i=1;i<101;i++)

  n+=i; }

  这很简单没什么可说的。 但是,你能不能写出相应的递归函数呢?

热心网友 时间:2024-04-09 07:22

递归就是自己调用自己

热心网友 时间:2024-04-09 07:25

递归就是一个函数自己call自己。void Func(){ Func();}递归很简单,一般复杂的遍历会使用递归。但是,递归成本很高,有堆栈溢出的风险,一般在高安全性场合,禁止使用递归方式开发。还是看使用场景了。

热心网友 时间:2024-04-09 07:19

我用VB写个 n!给你看n!=1*2*3*...n也可以说是 n!=n*(n-1)!function yt(byval n as integer) as long dim rtn as longif n=1 then rtn=1elsertn = n* yt(n-1)endif yt=rtnend function
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
哪个牌子复印机好 复印店用什么型号的复印机好 开复印店需要什么设备 家用打印复印机哪个好 如何分辨鞋底是不是空心格子底? Ubuntu10.04下安装Oracle11g 超市监控多少钱 超市防盗器要多少钱 超市防盗系统多少钱 智能存放柜管理系统 48小时核酸检测结果在哪里查询-48小时核酸检测怎么看结果 索尼相机RX100M6拍出的照片质量怎么样? 索尼RX100M6的连拍效果如何? 索尼相机RX100M6能拍视频吗?拍出来清不清晰? 索尼RX100M6的快速连拍功能怎么样? 索尼RX100M6的快速连拍功能怎么样? 索尼RX100M6的眼部对焦效果好吗? 索尼相机RX100M6怎么样?适合旅拍吗? 索尼RX100M6的眼部对焦效果如何? 索尼RX100 M6好用吗 “递归”在计算机和软件中都有什么含义? ...播放的时候无法自动播放连音乐也没有了!!怎么办,在线等!求救!!_百... WPS做的幻灯片在微软播不出来。。怎么办??? LED筒灯的产品优点 led筒灯的优势在哪些地方?5 LED筒灯作用是什么5 什么是LED筒灯?2 电吹风火花大怎么办? 灵魂slou怎么发? ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... soul怎么发 递归是什么意思?41 计算机在运行递归程序时,要用到桟结构?还是用到别的结构? 印花税分类及税率 大家有谁听说过日本语与陕西方言的联系? ...成音响,就是将MP3或MP4插上后能把它当成扬声器来听歌?如果可以... 收录机能否改制成输入MP3的扩音机 递归是什么意思?90 谁能够解释一下递归的本质!以及如何使用递归!28 请解释这个程序为什么用递归方法? 求大佬解释这个递归函数运行到最后一步不满足if条件时为是如何...1 解释一下DNS的递归解析是什么含义?15 刚买一台收录机,可不可以把MP3连接到上面,把收录机当做喇叭用? 如何把国旗放在微信头像随意位置 微信头像用国旗可以吗 国旗可以做微信头像吗 在正方体中,如何与体对角线构成直角三角形? 正方体内连接顶点形成为什么构成直角三角形 建设工程经竣工验收不合格的怎么处理 工程竣工验收不合格应采取什么措施 ...温度为什么要用集成温度传感器?它比用水银温度计有什么优点?_百度...