日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归调用流程详解

發布時間:2024/4/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归调用流程详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分析代碼段:

#include<stdio.h>void move(int x, int y) {printf("%c--->%c\n", x, y); } void hanoi(int n, char one, char two, char three) {if (n == 1)move(one, three);else{hanoi(n - 1, one, three, two);move(one, three);hanoi(n - 1, two, one, three);} }int main() {int m;printf("input the number of diskes:");scanf("%d",&m);printf("the step to move %d diskes:\n",m);hanoi(m, 'A', 'B', 'C'); }


看圖說明:黑色箭頭代表回溯階段,橘色箭頭代表逆推階段,箭頭上的數字代表整個遞歸程序運行的順續。本例設盤數n==3…
在main函數的調用中,傳遞給Hanoi的參數列表為(3,A,B,C)A->one,B->two,C->three…。然后進入到選擇語句,執行Hanoi(3-1,one,three,two),由于Hanoi(3-1,one,three,two)的參數列表中的參數順序已經改變,由one,two,three變為one,three,two,所以此時傳過來的參數變為Hanoi(2,A,C,B),當執行Hanoi(2-1,one,three,two)時,參數列表又變為Hanoi(2,A,B,C)。。。。。此后調用參數的變化情況與之類似。

說明:當再次調用Hanoi時,此時參數列表中每個參數位置上的參數的內容(one,three,two)對應到上次函數參數列表中每個對應位置上的參數。
例如:上次函數參數列表為(3,one(A),two(B),three?) -->(3,A,B,C)
下次調用時參數列表為(3-1,one(A),three?,two(B)) -->(2,A,C,B)
再次調用時參數列表為(2-1,one(A),three(B),two?) -->(1,A,B,C)
move(one,three)函數中的one,three對應當前函數體中函數參數列表,第一,三位置上的參數。

第一步:main函數調用Hanoi(3,A,B,C);
第二步:經判斷語句,調用 Hanoi(3-1,one,three,two)–> Hanoi (2,A,C,B) 。第一個箭頭所示步驟
第三步:經判斷語句,調用 Hanoi(2-1,one,three,two)–> Hanoi (1,A,B,C) 。第二個箭頭所示步驟
第四步:經判斷語句,執行move(one,three) -->move(A,C) 。
第五步:返回到 Hanoi(2-1,one,three,two)的位置,繼續執行下一行語句 。第三個箭頭所示步驟
第六步:執行move(one,three) -->move(A,B)
第七步:調用 Hanoi(2-1,two,one,three)–> Hanoi (1,C,A,B) 。第四個箭頭所示步驟
第八步:經判斷語句,執行move(one,three) -->move(C,B)
第九步:返回到 Hanoi(2-1,two,one,three)的位置 。第五個箭頭所示步驟
第十步:返回到 Hanoi(3-1,one,three,two)的位置 。第六個箭頭所示步驟
第十一步:執行move(one,three)–>move(A,C),繼續執行下一行語句
第十二步:調用 Hanoi(3-1,two,one,three)–> Hanoi (2,B,A,C) 。第七個箭頭所示步驟
第十三步:經判斷語句, 調用 Hanoi(2-1,one,three,two)–>Hanoi(1,B,C,A)。 第八箭頭所示步驟
第十四步:經判斷語句,執行move(one,three) -->move(B,A)
第十五步:返回到 Hanoi(2-1,one,three,two)的位置,繼續執行下一條語句。第九個箭頭所示步驟
第十六步:執行move(one,three)–>move(B,C)
第十七步:調用 Hanoi(2-1,two,one,three)–> Hanoi (1,A,B,C) 。第十個箭頭所示步驟
第十八步:經判斷語句,執行move(one,three)–>move(A,C)
第十九步:返回到 Hanoi(2-1,two,one,three)的位置。第十一個箭頭所示步驟
第二十步:返回到 Hanoi(3-1,two,one,three)的位置。第十二個箭頭所示步驟
OVER


原文:https://blog.csdn.net/qq_43739582/article/details/89066744?
?

總結

以上是生活随笔為你收集整理的递归调用流程详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。