1522843196 发表于 2020-3-24 17:51:21

求各位大佬解释一下代码

#include <Stdio.h>

age(n)
int n;
{
        int c;
        if(n==1)
        {
                c=10;
        }
      else
        {
                c=age(n-1)+2;
        }
        return(c);
}
int main()
{
        printf("%d",age(5));
}



怎么就等于18了呢?,有颜色那部分看不懂,跪求大佬们解答。

琴长不过时光 发表于 2020-3-24 19:16:24

递归就是函数自己调用自己 另外 所有函数展开,并不销毁 从最后一个函数 得到值后 然后再把前面的函数再一个个销毁
所以递归用不好很占内存的

qiuyouzhi 发表于 2020-3-24 17:58:49

这是个递归,分层次来看:
第一次:n = 4,c为age(4)+2
第二次:n = 3,c为age(3)+4
第三次:n = 2,c为age(2)+6
第四次:这时n = 1,所以c=10
加起来:
10 + 2 + 6就是18啦(只是猜测,有错误请指正)

琴长不过时光 发表于 2020-3-24 19:00:19

这个是递归
age判断 5 != 1;
c = age(5-1)+2;这时候n = 5-1 等于4
4 != 1;
c = age(4-1)+2+2;
3 !=1
c = age(3-1)+2+2+2
2 != 1
c = age(2-1)+2+2+2+2
1 == 1
c = 10+2+2+2+2
不知道你明白了没有

1522843196 发表于 2020-3-24 22:36:23

琴长不过时光 发表于 2020-3-24 19:00
这个是递归
age判断 5 != 1;
c = age(5-1)+2;这时候n = 5-1 等于4


为什么是以2递增呢?

1522843196 发表于 2020-3-24 22:42:33

琴长不过时光 发表于 2020-3-24 19:16
递归就是函数自己调用自己 另外 所有函数展开,并不销毁 从最后一个函数 得到值后 然后再把前面的函数再一 ...

懂啦,谢谢你。

1522843196 发表于 2020-3-24 22:43:41

qiuyouzhi 发表于 2020-3-24 17:58
这是个递归,分层次来看:
第一次:n = 4,c为age(4)+2
第二次:n = 3,c为age(3)+4


懂了,谢谢你!

琴长不过时光 发表于 2020-3-25 15:36:36

{:5_103:}懂了 不给个最佳答案吗
页: [1]
查看完整版本: 求各位大佬解释一下代码