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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lclofty 中级黑马   /  2015-6-12 18:12  /  1027 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>

int jiecheng(int n){
   
    int ji;
   
    if ( n==1 ){
        ji = 1;
        printf("n==1 %d\n", ji);
        printf("%d\n", n);
    }else{
        ji = jiecheng(n-1)*n;
        printf("n==2 %d\n", ji);
        printf("%d\n", n);
    }
    printf("return %d\n", ji);
    printf("%d\n", n);
    return ji;
}

int main(int argc, const char * argv[])
{
   
    int result = jiecheng(5);
   
    printf("%d\n", result);
    return 0;
}
/*******************************
结果为
n==1 1
1
return 1
1
n==2 2
2
return 2
2
n==2 6
3
return 6
3
n==2 24
4
return 24
4
n==2 120
5
return 120
5
120
********************************/
执行的步骤和流程控制的步骤不一样呀   具体步骤是怎么执行的?(被调函数中的printf是自己加的)

6 个回复

倒序浏览
没错啊  你认为是怎么样的
回复 使用道具 举报
晗修 发表于 2015-6-12 19:39
没错啊  你认为是怎么样的

传入的参数为5 n=5 应该先执行else{}内的语句吧,为什么先执行if{}内的语句呢?
回复 使用道具 举报
是这样的 不要想太多
回复 使用道具 举报
学习 学习了
回复 使用道具 举报
lclofty 发表于 2015-6-12 20:16
传入的参数为5 n=5 应该先执行else{}内的语句吧,为什么先执行if{}内的语句呢? ...

确实是先执行的else里的啊 只不过只执行到调用下一个自己的时候 后面的要等这个调用返回之后才会继续
如果你把print 放到调用之前 n就是5 4 3 2 1的打印了 不过乘积没办法 因为乘积必须要等之前的函数调用返回结果
回复 使用道具 举报
晗修 发表于 2015-6-12 23:36
确实是先执行的else里的啊 只不过只执行到调用下一个自己的时候 后面的要等这个调用返回之后才会继续
如 ...

谢谢啦 让你一点拨 明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马