C語言基礎 -44 函數_遞歸

遞歸:一個函數直接或間接調用自己,是嵌套的特例

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!

壓棧,棧恢復

使用遞歸時,很可能提前無法判斷遞歸多少次,遞歸多少層,可能段破裂,實際使用上面要多加小心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章