黑马程序员技术交流社区

标题: 求大神看,实现一个函数调用本身不会处出现死递归的案列 [打印本页]

作者: zzt244    时间: 2015-12-27 23:22
标题: 求大神看,实现一个函数调用本身不会处出现死递归的案列
#include <stdio.h>
int a;
int add();
int main(int argc, const char * argv[]) {
    add();
    return 0;

}
int add(){

    a++;
    if(a>5){
        return 0;

    }
    printf("%d\n",a);
    add();
    return 0;
}


这个运行的结果是1 2 3 4 5.  然后请看下面


#include <stdio.h>
int a;
int add();
int main(int argc, const char * argv[]) {
    add();
    return 0;

}
int add(){

    a++;
    if(a>5){
        return 0;

    }
    printf("%d\n",a);

    return 0;

}

这个运行出来的结果是1

两者区别在最后的 add();  为什么没了add()不会循环??


作者: holmesconan    时间: 2015-12-28 00:20
不会哎. 教教我
作者: 15133444432    时间: 2015-12-28 00:48
因为你如果不加add()就不能构成递归...不会有循环输出
作者: peiyu    时间: 2015-12-28 00:51
因为加了add()就再次调用本方法,调一次a就加1,直到a>5进入if语句跳出add(),不再执行后面代码;不加add()就直接到最后的return 0,a++ =1;
作者: HHE_johnson    时间: 2015-12-28 08:29
因为没有add()之后第一次执行完printf()之后就立刻返回0结束了啊
作者: yolande    时间: 2015-12-28 12:26
。。。你把add()放到打印少年,输出的序列会反过来,我会乱说




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2