黑马程序员技术交流社区
标题: 一道函数调用,谁能解释下怎么是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
谢谢指教,明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |