好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

递归算法C版推荐课件.ppt

38页
  • 卖家[上传人]:cn****1
  • 文档编号:590835289
  • 上传时间:2024-09-15
  • 文档格式:PPT
  • 文档大小:339KB
  • / 38 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第四章第四章 递归算法递归算法2021/8/221        前面已经介绍了关于递归调用这样一种操作,而递归程序设计是C++语言程序设计中的一种重要的方法,它使许多复杂的问题变得简单,容易解决了递归特点是:函数或过程调用它自己本身其中直接调用自己称为直接递归,而将A调用B,B以调用A的递归叫做间接递归 2021/8/222 【例【例1】】 给定给定n((n>=1)),用递归的方法计算用递归的方法计算1+2+3+4+...+(n-1)+n 【算法分析】 本题可以用递归方法求解,其原因在于它符合递归的三个条件:       (1)本题是累加问题:当前和=前一次和+当前项,而前一次和的计算方法与其相同,只是数据不同s(n)=s(n-1)+n;       (2)给定n,所以是有限次的递归调用;       (3)结束条件是当n=1,则s=1 【参考程序】#includeusing namespace std;int fac(int);                                        //递归函数int main(){  int t;  cin>>t;                                       //输入t的值  cout<<"s="<

       2021/8/224 【例【例2】】 设有设有N个数已经按从大到小的顺序排列,现在输入个数已经按从大到小的顺序排列,现在输入X,判断它是,判断它是否在这否在这N个数中,如果存在则输出:个数中,如果存在则输出:“YES” 否则输出否则输出“NO” 【算法分析】       该问题属于数据的查找问题,数据查找有多种方法,通常方法是:顺序查找和二分查找,当N个数排好序时,用二分查找方法速度大大加快二分查找算法:    (1) 设有N个数,存放在A数组中,待查找数为X,用L指向数据的高端,用R指向数据的低端,MID指向中间:    (2) 若X=A[MID] 输出 “YES”;    (3)若XA[MID]则到数据前半段查找:L不变,R=MID-1,计算新的MID值,并进行新的一段查找;     (5)若L>R都没有查找到,则输出“NO”     该算法符合递归程序设计的基本规律,可以用递归方法设计 2021/8/225 【参考程序】【参考程序】     #include    #include    using namespace std;    int a[11];    void search(int,int,int);    int main() //主程序主程序    {        int k,x,L=1,R=10;        cout<<"输入输入10个从大到小顺序的数:个从大到小顺序的数:"<>a[k];        cin>>x;        search(x,L,R);         system("pause");     }    void search(int x,int top,int bot) //二分查找递归过程二分查找递归过程    {        int mid;         if (top<=bot)     {     mid=(top+bot)/2; //求中间数的位置求中间数的位置     2021/8/226 if (x==a[mid]) cout<<"YES"<

       【算法分析】    本题是典型的递归程序设计题     (1)当N=1 时,只有一个盘子,只需要移动一次:A—>C;     (2)当N=2时,则需要移动三次:         A------ 1 ------> B,       A ------ 2 ------> C,       B ------ 1------> C.     (3)如果N=3,则具体移动步骤为:2021/8/228 2021/8/229        假设把第3步,第4步,第7步抽出来就相当于N=2的情况(把上面2片捆在一起,视为一片):2021/8/2210        所以可按“N=2”的移动步骤设计:       ①如果N=0,则退出,即结束程序;否则继续往下执行;       ②用C柱作为协助过渡,将A柱上的(N-1)片移到B柱上,调用过程mov(n-1, a,b,c);       ③将A柱上剩下的一片直接移到C柱上;       ④用A柱作为协助过渡,将B柱上的(N-1)移到C柱上,调用过程mov (n-1,b,c,a)参考程序】【参考程序】       #include      using namespace std;      int k=0,n;      void mov(int n,char a,char c,char b) //用用b柱作为协助过渡,将柱作为协助过渡,将a柱上的(柱上的(n)移到)移到c柱上柱上      {      if (n==0) return; //如果如果n=0,则退出,即结束程序,则退出,即结束程序      mov(n-1,a,b,c ); //用用c柱作为协助过渡,将柱作为协助过渡,将a柱上的(柱上的(n-1)片移到)片移到b柱上柱上      k++;      cout <"<点击阅读更多内容

      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.