遞歸:一個函數直接或間接調用自己,是嵌套的特例
book@100ask:~/C_coding/CH02$ cat func.c
#include <stdio.h>
#include <stdlib.h>
void a(void)
{
printf("[%s]Begin!\n",__FUNCTION__);
printf("[%s] call b()!\n",__FUNCTION__);
b();
printf("[%s]b() return!\n",__FUNCTION__);
printf("[%s]End!\n",__FUNCTION__);
}
void b(void)
{
printf("[%s]Begin!\n",__FUNCTION__);
printf("[%s] call c()!\n",__FUNCTION__);
c();
printf("[%s]c() return!\n",__FUNCTION__);
printf("[%s]End!\n",__FUNCTION__);
}
void c(void)
{
printf("[%s]Begin!\n",__FUNCTION__);
printf("[%s]End!\n",__FUNCTION__);
}
int main()
{
printf("[%s]Begin!\n",__FUNCTION__);
printf("[%s] call a()!\n",__FUNCTION__);
a();
printf("[%s]a() return!\n",__FUNCTION__);
printf("[%s]End!\n",__FUNCTION__);
return 0;
}
book@100ask:~/C_coding/CH02$ make func
cc func.c -o func
book@100ask:~/C_coding/CH02$ ./func
[main]Begin!
[main] call a()!
[a]Begin!
[a] call b()!
[b]Begin!
[b] call c()!
[c]Begin!
[c]End!
[b]c() return!
[b]End!
[a]b() return!
[a]End!
[main]a() return!
[main]End!
壓棧,棧恢復
使用遞歸時,很可能提前無法判斷遞歸多少次,遞歸多少層,可能段破裂,實際使用上面要多加小心