再次看遞迴

2021-09-06 04:19:29 字數 1140 閱讀 4829

#include

#include

using namespace std;

void up_and_down(int i)

{cout執行結果如下:

首先, main() 使用引數 1 呼叫了函式 up_and_down() ,於是 up_and_down() 中形式引數 n 的值是 1, 故列印語句 #1 輸出了 level1 。

然後,由於 n 的數值小於 4 ,所以 up_and_down() (第 1 級)使用引數 n+1 即數值 2 呼叫了 up_and_down()( 第 2 級 ). 使得 n 在第 2

級呼叫中被賦值 2, 列印語句 #1 輸出的是 level2 。與之類似,下面的兩次呼叫分別列印出 level3 和 level4 。

當開始執行第 4 級呼叫時, n 的值是 4 ,因此 if 語句的條件不滿足。這時候不再繼續呼叫 up_and_down() 函式。第 4 級呼叫接

著執行列印語句 #2 ,即輸出 level4 ,因為 n 的值是 4 。現在函式需要執行 return 語句,此時第 4 級呼叫結束,把控制權返回給該

函式的呼叫函式,也就是第 3 級呼叫函式。第 3 級呼叫函式中前乙個執行過的語句是在 if 語句中進行第 4 級呼叫。因此,它繼

續執行其後繼**,即執行列印語句 #2 ,這將會輸出 level3 .當第 3 級呼叫結束後,第 2 級呼叫函式開始繼續執行,即輸出

level2 .依次類推.

注意,每一級的遞迴都使用它自己的私有的變數 n .可以檢視位址的值來證明.

遞迴的基本原理:

1 每一次函式呼叫都會有一次返回.當程式流執行到某一級遞迴的結尾處時,它會轉移到前一級遞迴繼續執行.

2 遞迴函式中,位於遞迴呼叫前的語句和各級被調函式具有相同的順序.如列印語句 #1 位於遞迴呼叫語句前,它按照遞

歸呼叫的順序被執行了 4 次.

3 每一級的函式呼叫都有自己的私有變數.

4 遞迴函式中,位於遞迴呼叫語句後的語句的執行順序和各個被呼叫函式的順序相反.

5 雖然每一級遞迴有自己的變數,但是函式**並不會得到複製.

6 遞迴函式中必須包含可以終止遞迴呼叫的語句.

再次看介面測試

什麼是介面測試?是前後臺資料互動的通道,是乙個功能的實現。那介面測試的本質是?從乙個程式設計師的角度來講,介面,就是後台的乙個函式,介面文件裡面描述的介面引數就是函式的引數,介面返回的資料就是函式的返回值。比如 支付寶支付,我們掃碼支付,後台通過一串位址,找到商家的位址,然後你付款成功,這條付款成功...

看導師痛打涼粉與作者再次辯解

這個時候另外有乙個cao yufei出來發言 導師馬上追問 why?可惜為何不與gigix繼續進行下去呢?那個議論顯然比這個深入,而且有實際的意義。於是得到乙個回答 quote 那個時候我就已經預見了今天我不得不作出的處理。實際上從一開始作者就知道a的情況,a的弱點。我知道,這樣的人不能重用,我對他...

由翻轉字元竄再次理解遞迴

要求 輸入乙個字串,字串反序輸出。比如 hello olleh 首先就看 是什麼 include include using namespace std string str void reverse int n 遞迴翻轉字串 int main 通過這種較為偏向硬體的說法,來解答演算法設計中遞迴的呼...