算法分析与设计 第五版 李老师的例子:
#include <stdio.h>
void f(int n)
{ if (n<1) return;
else
{ printf("调用f(%d)前,n=%d\n",n-1,n);
f(n-1);
printf("调用f(%d)后:n=%d\n",n-1,n);
}
}
运行结果:
不明白运行结果为什么是这样
而不是 调用f(4)前,n=3
调用f(4)后,n=3递推下去这样的结果
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出