不同的引數傳遞方式對遞迴函式遞迴深度的影響

2021-06-22 10:31:41 字數 1206 閱讀 5933

1.函式介紹

對於同樣功能的遞迴函式,分別用傳指標和傳值的方式進行引數傳遞,觀察這兩種傳參的方式對他們遞迴深度的影響。在用不同大小的字串、不同大小的棧空間分別進行測試。函式設定為死迴圈,讓函式無窮的遞迴,觀察函式在棧溢位崩潰時能遞迴的最大次數。下面的實驗中,分別讓函式傳遞乙個指標引數、乙個引用引數、乙個string引數。

2.實驗結果

限定棧空間下不同的引數傳遞方式能遞迴的深度(單位:遞迴次數)

字串長度

棧空間8192kb

棧空間1024kb

傳指標方式

傳引用方式

傳值方式

傳指標方式

傳引用方式

傳值方式

2000

327426

327351

218296

98050

98045

65268

20000

326689

326712

217951

97351

97404

64848

200000

321068

321214

214067

91703

91826

61208

3.結果分析

從表中看出:

(1)傳指標和傳引用基本沒有差別。

(2)用傳指標或引用的方式比用傳值的方式進行遞迴時,遞迴次數要多。傳指標和傳引用能遞迴的次數大概是傳值方式的1.5倍。

(3)無論是那種傳參方式,字串變大之後,遞迴次數都會略微減少,但是這種變化不是特別明顯。

4.更深入的分析:

(1)傳指標方式:

**:

//遞迴函式1:傳指標

void recursion_1(char* x)

str[i] = '\0';

return str;

}//遞迴函式1:傳指標

void recursion_1()

//遞迴函式2:傳引用

void recursion_2(string &x, string &y, string &z, string &t, string &p)

//遞迴函式3:傳值

void recursion_3(string x, string y, string z, string p)

int main()

Delphi 函式傳遞引數的不同方式

在delphi過程 函式中傳遞引數幾個修飾符為const var out。另一種不加修飾符的為預設按值傳遞引數。一 預設方式以值方式傳遞引數 procedure tform1.procnormal value string begin orignum value me lblreturn.capti...

Delphi 函式傳遞引數的不同方式

在delphi過程 函式中傳遞引數幾個修飾符為const var out。另一種不加修飾符的為預設按值傳遞引數。一 預設方式以值方式傳遞引數 procedure tform1.procnormal value string begin orignum value me lblreturn.capti...

函式引數傳遞的方式

按值傳遞 主調函式向呼叫函式傳遞引數實際上只是將實參的拷貝 即臨時副本 傳遞給了被呼叫函式,並不是實參本身,這樣被調函式不能直接修改主調函式中變數的值,而只能修改其私有的臨時副本的值。引用傳遞 對引用的操作等於對其指定的物件進行操作,當將實參傳遞給形參時,形參就指向了實參 指標傳遞 形參為指向實參位...