fanzhihao 发表于 2016-3-27 19:52:36

求大神解答小问题

问第5个人多大。(第5个人比第4个人大2岁,第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人比第一个人大2岁。已知第一个人10岁。)就是递归函数问题。
#include<stdio.h>
#include<math.h>
int agee(int x)
{
        int age;
        if(x==1)
                age=10;
                else       
                        age=agee(x-1)+2;       
        return(age);
}
int main()
{
        int age;
        age=agee(5);
        printf("age=%d\n",age);
       
}
为什么递归当中一定要有那个else,我把else去掉之后就不能输出了。求大神解答。。~~!

DAY 发表于 2016-3-27 21:17:58

#include<stdio.h>
#include<math.h>
int agee(int x)
{
      int age;
      if(x==1)
                return 10;
          else      
                   return agee(x-1)+2;      
   
}
int main()
{
      int age;
      age=agee(5);
      printf("age=%d\n",age);
      

好多好多鱼 发表于 2016-3-27 22:17:19

还用问吗递归就得有终止条件,才能层层返回,你把else去掉了 无论条件如何age=agee(x-1)+2;   这句代码一定会执行,代价就是无限循环

醴泉之水 发表于 2016-3-27 22:51:30

    如果没有 else,当X = 1 时,进入 if 里边,然后下一条执行的是 age = agee(x - 1) + 2;然后问题就来了,agee( x - 1) 就是 agee( 0 ) 了,这里就没有任何约束了,因为 0 和负数不会退出 agee() 的,它已经避过了 1;
楼主最好是像一楼一样写。

ligen超越 发表于 2016-3-28 15:47:54

最讨厌就是出这样没得意义的题目了!本来可以直接走直路的,出题的人非要误导你走曲线!!{:10_249:}
页: [1]
查看完整版本: 求大神解答小问题