A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 1wang2huan 于 2015-9-6 14:36 编辑

问题来源:

兔子问题  完全混乱 求帮助
http://bbs.itheima.com/thread-234606-1-1.html
(出处: 黑马程序员IT技术论坛)

具体问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?
  1. #include <stdio.h>


  2. /**
  3. *  递归函数计算
  4. *
  5. *  @param n 想查看的第几个月
  6. *
  7. *  @return 兔子的数量
  8. */
  9. int Rabbits(int n){
  10.     int total;
  11.     if (1 == n || 2 == n) {
  12.         total = 2;
  13.     }else{
  14.         total = Rabbits(n-1)+Rabbits(n-2);
  15.     }

  16.     return total;
  17. }
  18. //主函数
  19. int main() {
  20.     int n = 1;
  21.     printf("请输入你想查第几个月的兔子:\n");
  22.     scanf("%d",&n);
  23.     getchar();
  24.     int total = Rabbits(n);
  25.     printf("第%d个月有%d只兔子",n,total);
  26.     return 0;
  27. }
复制代码


16楼的这个代码也不错,思路挺清楚,支持一下.
我只是比较习惯用递归解这样的可以递推的公式!
数学的思想,让我感到亲切,
我这里写出这个递归思路,只是为了交流用,不是装哦!

评分

参与人数 1黑马币 +2 收起 理由
jx836202365 + 2 淡定

查看全部评分

32 个回复

正序浏览
牛叉
回复 使用道具 举报
我咋没有回帖加分啊
回复 使用道具 举报
谢啦!刚好我也碰到了这个问题
回复 使用道具 举报
强哥v5,赞一个
回复 使用道具 举报

你看回帖前几个,都把黑马币领走了!!!你来晚了....
回复 使用道具 举报
1wang2huan 发表于 2015-9-6 15:55
想法不错,这种思路不是很好想到,我看明白了!棒棒哒!!,学习了!

说好的黑马币呢- -
回复 使用道具 举报

想法不错,这种思路不是很好想到,我看明白了!棒棒哒!!,学习了!
回复 使用道具 举报
#include<stdio.h>

int main(){
    int num1 = 0,num2 = 1,num = 0,month;
   
    printf("请输入想要查看第几个月的兔子:\n");
   
    scanf("%d",&month);
   
    for(int i=1;i<=month-1 ; i++){
   
        num=num1+num2;
        
        num1=num2;
        
        num2=num;
    }
   
    printf("第%d个月的兔子数为:%d对",month,num);
   
    return 0;
}
回复 使用道具 举报
已学习 谢谢
回复 使用道具 举报
西域男孩刚 来自手机 中级黑马 2015-9-6 14:12:44
24#
递归函数要慎用啊!即占内存,又容易出错。
回复 使用道具 举报
sha啥?????、
回复 使用道具 举报
尽量避免用递归吧,不好控制容易出现死循环;用其他几个循环语句不是也不错么
回复 使用道具 举报
技术分享贴~
回复 使用道具 举报
昨天我也刚学过递归,彬彬老师说递归基本上都可用循环代替,改成循环试试
回复 使用道具 举报
bustle 发表于 2015-9-6 13:12
用循环解,递归问题尽量都这么用。

这个代码也不错,思路挺清楚,支持一下.
我比较习惯用递归解这样的可以递推的公式!
数学的思想,让我感到亲切,
我这里写出这个,只是为了交流用,不是装哦!
回复 使用道具 举报
用循环解,递归问题尽量都这么用。
  1. #include <stdio.h>

  2. int main(){

  3. int n;
  4. printf("请输入你想知道哪个月兔子的对数\n");
  5. scanf("%d",&n);

  6. int a[100]={1,1}; //在Xcode里可以定义a[n],定义a[n]必须满足n>=3,且单独定义a[0]=1,a[1]=1,这里只作整理思路

  7. if (n<100){
  8.        
  9. for (int i=2;i<n;i++){ //从第3个月开始
  10.         a[i]=a[i-1]+a[i-2];
  11. }
  12. printf("第%d个月兔子的对数为%d\n",n,a[n-1]);
  13. }
复制代码


思路整理:递归类问题的解决,一般都可以借用一维数组,先定义一个数组,用下标来表示各个元素,最后取出你想要的元素。
用循环不完美的地方:数据类型有值域宽的限制,a[10000]会非常大,可能存不下。//主要是因为我用32位win7,又没装 visual basic ,只能跑跑免费软件C-Free,惭愧。
最后,顶楼主。
回复 使用道具 举报
不明真相
回复 使用道具 举报
哦,我过来看看,递归函数比循环复杂,还不一定好用
回复 使用道具 举报
初学者还是不要钻那么深,对ios开发然并卵。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马