开启左侧

学会用递归的方法解题

二维码 [复制链接]
181 0
1、斐波拉切数列
输出如下数列:
1 1 2 3 5 8 13 21 34 55

  1. #include <iostream>
  2. using namespace std;


  3. int fibonacci(int i)
  4. {
  5. if(i==0)
  6. {
  7. return 0;
  8. }
  9. else if (i==1)
  10. {
  11. return 1;
  12. }
  13. else
  14. {
  15. return fibonacci(i-1) + fibonacci(i-2);
  16. }
  17. }


  18. int main()
  19. {
  20. for(int i=1; i<10; i++)
  21. {
  22. cout<<"第"<<i<<"项的值为:"<<fibonacci(i)<<endl;
  23. }


  24. return 0;
  25. }
复制代码

递归求字符串长度


  1. #include <stdio.h>


  2. int my_strlen(const char *str);

  3. int main()
  4. {
  5. printf("%d\n",my_strlen("chenqin"));


  6. printf("%d\n",my_strlen(""));
  7. printf("%d\n",my_strlen(NULL));


  8. return 0;
  9. }


  10. int my_strlen( const char *str )
  11. {
  12. if(str == NULL || *str == '\0')
  13.        return -1;
  14. else
  15.        return my_strlen(str+1) + 1;
  16. }
复制代码

汉诺塔问题

  1. #include <stdio.h>


  2. unsigned int count = 0;


  3. void hanoi(int n, char A, char B, char C)
  4. {

  5. if(n>0)
  6. {
  7. if (n == 1)
  8. {
  9. printf("%c->%c\n",A, C);
  10. count++;

  11. }
  12. else
  13. {
  14. count++;
  15. hanoi(n-1,A,C,B);
  16. printf("%c->%c\n",A, C);
  17. hanoi(n-1,B, A, C);

  18. }
  19. }
  20. }


  21. int main()
  22. {

  23. int n;


  24. printf("How many dishes do you want to play?:");
  25. scanf("%d",&n);
  26. hanoi(n,'A','B','C');
  27. printf("Totall move %d times\n",count);
  28. return 0;

  29. }
复制代码

输出如下图形:

学会用递归的方法解题

学会用递归的方法解题


  1. #include <iostream>
  2. #include <cstring>
  3. #define  MAX_LENGTH 65
  4. #define  DIVS 6


  5. using namespace std;


  6. //************************************
  7. // Method:    SubDivide
  8. // FullName:  SubDivide
  9. // Access:    public
  10. // Returns:   void
  11. // Qualifier:
  12. // Parameter: char ch[]
  13. // Parameter: int min
  14. // Parameter: int max
  15. // Parameter: int i
  16. //************************************
  17. void SubDivide(char ch[], int min, int max, int i)
  18. {
  19.     int mid = (min + max)/2;


  20.     if(i == 0)
  21.     {
  22.         return;
  23.     }
  24.     ch[mid] = '|';
  25.     SubDivide(ch,min,mid,i-1);
  26.     SubDivide(ch,mid,max,i-1);
  27. }


  28. int main()
  29. {
  30.     char ch[MAX_LENGTH];
  31.     int i,max,min;


  32.     /*初始化数组和第一行*/
  33.     for(i=1; i<MAX_LENGTH-2;i++)
  34.         ch = ' ';
  35.     max = MAX_LENGTH - 2;
  36.     min = 0;
  37.     ch[max] = ch[min] = '|';
  38.     ch[MAX_LENGTH-1] = '\0';
  39.     for(i=0; i<MAX_LENGTH-1;i++)
  40.         cout << ch;
  41.     cout<<endl;
  42.     /*开始采用折半和递归的方法输出图形*/
  43.     for(int i =1; i<=DIVS; i++)
  44.     {
  45.         /*先以空格填充行*/
  46.         for(int j=1; j<MAX_LENGTH-2; j++)
  47.             ch = ' ';
  48.         SubDivide(ch, min, max, i);
  49.         cout<<ch<<endl;
  50.         


  51.     }
  52.     getchar();


  53.     return 0;
  54. }
复制代码



赞助本站





上一篇:传染病问题
下一篇:买不到的数目
学会善用【论坛搜索】功能,很多你要寻找的答案就在这里面;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

发新帖 回复

104

主题

104

帖子

233

街币
更多

精彩推荐

新人报到专用贴
新人报到专用贴
==新人报道格式(选填)== 【我的昵称】: 【我的性别
爱好街资源共享区文件解压密码
爱好街资源共享区文件解压密码
因本站分享的文件实在太多,目前收集整理已经接近4T,所以有些文
独立团VIP教程第1-7版全套打包下载(含课件源码工具等)
独立团VIP教程第1-7版全套打包
独立团第1版易语言教程 独立团第一版1易语言入门 1-1-1外
爱好街链接地址失效有奖报错
爱好街链接地址失效有奖报错
我们的成长离不开大家的支持!! 各位爱好街的会员:
魔鬼作坊vip教程辅助制作培训之零基础绝密汇编语言入门课程
魔鬼作坊vip教程辅助制作培训
这套课程为汇编入门教程,学习游戏逆向反汇编需要用到的基础知
万挂作坊教程+封包+E模块(全套下载)
万挂作坊教程+封包+E模块(全套
万挂-封包 封包加密解密-01 封包加密解密-02 封包加密

免责声明:
在爱好街发布的文章与主题属会员个人意见,与本站立场无关,文章内容由作者与爱好街享有相关版权,如需转载请注明出处或取得会员与本站的许可,否则本站将追究相应的法律责任,如部分内容有侵犯任何版权问题,请立即告知本站,本站将及时予以删除并致以最深的歉意。另外不得将本站内容用于商业或者非法用途,否则,一切后果请用户自负。

Mail To:MasTer@AiHaiJie.Com

快速回复
快速回复 返回顶部 返回列表