黑马程序员技术交流社区

标题: 一道函数调用,谁能解释下怎么是012345这个答案 [打印本页]

作者: lijunyusmile    时间: 2016-7-6 19:16
标题: 一道函数调用,谁能解释下怎么是012345这个答案
#include "stdio.h"
void fun(int m);

int main()
{
    int w=5;
    fun(w);
    return 0;
}
void fun(int m)
{
   
    if(m>0)
        fun(m-1);
   
    printf("%d",m);
}




谁能帮忙解释下,看着发晕,我以前感觉只能输出0,运行了一下是012345,m变化为0后又输出涨到5,觉得应该是函数嵌套递推应用,但是还是不懂?求沟通求指教~~




作者: FFFF001    时间: 2016-7-6 21:40
/*
递归调用就是在函数中调用它自己并传给相应的参数,
    这一动作是层层进行的,一层压一层,直到满足条件(比如 return,表达式不成立,无法继续调用等等),它才会停止递归调用,开始从最后一个递归调用返回。
        当 m 传入函数时: 此时 m == 5;
                进入 if语句后,
                        再次调用 fun()函数 此时 由于减一, m == 4,并压入栈,等待递归返回
            再次进入 if语句后,
                        再次调用 fun()函数 此时 由于减一, m == 3,并压入栈,等待递归返回
                ........
                依次循环后,当 m == 0时, 打印 m.递归向上返回.
            所以,打印结果为 0 1 2 3 4 5
*/




作者: lijunyusmile    时间: 2016-7-7 13:43
FFFF001 发表于 2016-7-6 21:40
/* 递归调用就是在函数中调用它自己并传给相应的参数,    这一动作是层层进行的,一层压一层,直到满足条件 ...

谢谢指教,明白了




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