c語言函式遞迴呼叫的問題,C語言函式遞迴呼叫問題。

2021-12-19 05:33:21 字數 2509 閱讀 8734

1樓:鏡花cy水月

首先要知道fun()是一個定義的函式

fun(a)相當於fun(3)

由下面的函式定義得出fun(3)=

又fun(2)=

再求fun(0),因為0不滿足if裡的條件,所以不執行fun(1)=

所以是0120,希望樓主看明白

2樓:匿名使用者

先呼叫fun(3),fun(3)中呼叫fun(2),fun(2)中呼叫fun(1),fun(1)中呼叫fun(0),此時n=0,,條件不成立,這時開始以一層一層返回,返回到fun(1),fun(1)中第一條呼叫完了(剛返回的),--n此時n=0,輸出0,然後接著遞迴呼叫fun(--n),n已經變成-1,這時fun(1)全執行完了,返回到fun(2),,同樣fun(2)中第一條呼叫完了(剛返回的),--n,此時n=1,輸出1,然後接著遞迴呼叫fun(--n),n已經變成0,,這時fun(2)全執行完了,返回到fun(3),,同樣fun(3)中第一條呼叫完了(剛返回的),--n,此時n=2,輸出1,然後接著遞迴呼叫fun(--n),n已經變成1,,在遞迴呼叫fun(1)中又有一次輸出0(跟前面那次呼叫一樣),,這時fun(3)全執行完了,返回到主函式。

3樓:春雨_潤物

fun(-1)=fun(0) 不輸出任何資料fun(1) 輸出0

fun(2)=fun(1)->輸出1

fun(3)=fun(2)->輸出2->fun(1)

4樓:匿名使用者

#include

void fun(int);

int main()

void fun(int n)}

c語言函式遞迴呼叫問題。

5樓:天涯海角

c語言函式呼叫整個過程是當準備呼叫函式時,先將形參以從右往左進行壓棧程式跳轉到函式入口,將函式的區域性變數壓棧(如果函式內部再呼叫函式就是在重複這個過程),函式返回時出棧,遞迴是在最後一個點上面函式返回,前面分配的資源根本沒有釋放,遞迴只有在最後一個返回點上面,根據遞迴順序反過來釋放資源,這也是為什麼當遞迴的資料量比較大或者遞迴的層次比較深的時候,很容易造成記憶體溢位的原因

6樓:匿名使用者

函式其實沒有釋放記憶體的概念,因為函式都是在指令區,而不是通常所說的釋放記憶體對應的資料區,不過在整個程式執行完之後指令區也是要釋放的。

函式呼叫的大概過程如下:

1,將呼叫函式的上下文入棧;

2,呼叫被呼叫函式;

3,被調換函式執行;

4,呼叫函式上下文出棧,繼續執行後繼指令。

所以在函式呼叫過程中原呼叫函式是不會退出的-----即你所說的釋放記憶體。

具體到你給的**:

首先main中呼叫test, 進入test後要求讀入一個char, 你輸入'1'後執行case '1'中語句,所以輸出「已呼叫」,然後就執行test()語句,即遞迴呼叫,此時main呼叫的test要等新的test執行完畢才能繼續執行後繼的i++語句;

再次進入test之後與從main中進入時一樣,如果輸入的是'1'會接著遞迴呼叫test,由於你輸入了5次1,所以會繼續呼叫5次test;

在最後一個test中你輸入了esc? 所以不再走case '1'而走default了,所以輸出"222222"; switch執行完之後判斷c==27滿足,所以while迴圈退出,繼續執行printf語句,由於之前的test統統沒有執行過case 1裡的i++語句,所以全域性變數i還是0;輸出i=0; 到此最後一次test執行完畢;

倒數第二次的test繼續執行i++, 所以i=2了,case 1執行完畢,但由於沒有寫break語句,所以繼續執行default 語句,輸出"222222", 退出switch語句,判斷c==27, 由於c是全域性變數,且最後一次輸入的剛好是esc, 所以判斷滿足, 退出while迴圈,輸出i=1, 到此倒數第二次test執行完畢;

與倒數第二次類似的繼續執行倒數第

三、倒數第

四、倒數第五和最終的第一次test後繼**,也就輸出如你列出的結果了。

c語言 函式遞迴呼叫是怎麼回事?

7樓:匿名使用者

一般來說是自己呼叫自己,一般有兩個分支,一個分支是呼叫自己,還有一個分支是結束條件

如求n!

int f(int n)

還有一個比較複雜一點,是雙向呼叫,也就是a函式呼叫b函式,b函式在呼叫a函式

這樣迴圈呼叫,其實基於這個道理,還有多個函式互相呼叫,不過這樣的情況很少見

但萬變不離其宗,每個函式都有兩個分支,一個是結束條件,一個是呼叫函式

8樓:匿名使用者

遞迴呼叫是一種特殊的巢狀呼叫,是某個函式呼叫自己,而不是另外一個函式。但是呼叫的時候肯定有一個終止條件,退出遞迴呼叫。

9樓:匿名使用者

函式自己呼叫自己,或兩函式互相巢狀。

10樓:匿名使用者

自己呼叫自己就是遞迴,資料結構中的樹遍歷可以用遞迴實現。

c語言遞迴呼叫漢諾塔,C語言函式遞迴呼叫漢諾塔問題

遞迴演算法的出發點不是由初始條件出發,而是把出發點放在求解的目標上,從所求的未知項出發逐次呼叫本身的求解過程,直到遞迴的邊界 即初始條件 漢諾塔問題的重點是分析移動的規則,找到規律和邊界條件。若需要將n個盤子從a移動到c就需要 1 將n 1個盤子從a移動到b 2 將你第n個從a移動到c 3 將n 1...

c語言的函式問題,c語言函式呼叫問題

可以不寫,但是要把你的自定義函式寫在主函式前面才行。就是說把z的值返回到主函式,本例中就是把z的值返回給c。不能不寫的,否則當編譯器編譯到你main函式時,由於還沒編譯到下面的max定義。所以它找不到max到底是什麼符號。一般申明都寫在函式後面的,否則,出了main外,其他函式看不到max的申明的。...

C語言中函式呼叫問題,C語言中函式的呼叫

首先我們來說一下,你這個程式是有很大的問題的。函式有且只有唯一一個返回值,當程式執行到return的時候,這個函式就結束並返回了。所以,你這裡寫2個return來返回最大值和最小值是不可能的。再者,如果你想使用返回值作為最大值,最小值的傳遞,那麼在main函式中,你呼叫star函式的時候需要一個變數...