阿摩線上測驗 登入

申論題資訊

試卷:107年 - 107 一般警察特種考試_二等_刑事警察人員犯罪分析組:計算機概論(包括計算機結構、資料結構、程式設計)#69515
科目:計算機概論、大意(資訊科學概論,電腦常識,電子計算機概論)
年份:107年
排序:0

題組內容

三、下面為一以 C 語言撰寫之副程式,用來解決河內塔(tower of Hanoi)問題。phpqmLohC

申論題內容

⑸上面 tower 副程式屬於遞迴副程式(recursive subroutine)。另有一種型態稱為 coroutine,請說明 recursive subroutine 和 coroutine 有何差別?(4 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
遞迴副程式(Recursive subroutine)和協程(Coroutine)是兩種不同的程序設計概念,它們在控制流程和用途上有顯著差異:
遞迴副程式(Recursive Subroutine)
定義:遞迴副程式是一種特殊的副程式,它能夠呼叫自己,直接或間接地進行自我遞迴。
控制流程:在遞迴過程中,每當副程式呼叫自己時,當前函數的狀態(包括局部變量和執行點)會被壓入調用棧中,然後開始一個新的函數執行環境。
結束條件:每次遞迴呼叫通常都會將問題規模縮小,直到達到基礎情況(base case),此時遞迴終止。
用途:遞迴常用於解決可以分解為相似子問題的問題,如樹和圖的遍歷、分治算法等。
協程(Coroutine)
定義:協程是一種比副程式更一般化的程序組件,它支持多個入口點和暫停(yielding)與恢復(resuming)操作。
控制流程:協程可以在某一點上暫停它的執行(通常是通過 yield 關鍵字),並在之後從該點恢復,保持其執行狀態(包括局部變量和當前執行點)。
結束條件:協程不需要基礎情況來終止,而是在它的執行過程中可以多次開始和停止,直到完成它的任務。
用途:協程適用於協作多任務、異步編程和事件驅動程序,尤其是在需要維護多個同時進行的任務的狀態時。
總的來說,遞迴副程式著重於通過自我呼叫來解決問題,而協程則是一種更靈活的控制結構,它允許多個執行流程相互協作,暫停和恢復它們的執行。