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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#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,觉得应该是函数嵌套递推应用,但是还是不懂?求沟通求指教~~



2 个回复

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



回复 使用道具 举报
FFFF001 发表于 2016-7-6 21:40
/* 递归调用就是在函数中调用它自己并传给相应的参数,    这一动作是层层进行的,一层压一层,直到满足条件 ...

谢谢指教,明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马