下面為一以C 語言撰寫之副程式,用來解決河內塔(tower of Hanoi)問題。
void tower(int n, char start, char tmp, char end) {
if (n==1) {
printf("Move disk %d from %c to %c\n", n, start, end);
return;
}
tower(n-1, start, end, tmp);
printf("Move disk %d from %c to %c\n", n, start, end);
tower(n-1, tmp, start, end);
}
何謂河內塔(tower of Hanoi)問題?(4 分)
如果主程式呼叫tower(2, 'A', 'B', 'C'),請問輸出是什麼?(4 分)
如果主程式呼叫tower(8, 'A', 'B', 'C'),請問輸出總共會有多少行?(4 分)
上面tower 副程式中的“if (n==1)”如果改成“if (n==0)”,並且主程式呼叫
tower(8, 'A', 'B', 'C'),請問輸出總共會有多少行?(4 分)
上面tower 副程式屬於遞迴副程式(recursive subroutine)。另有一種型態稱為
coroutine,請說明recursive subroutine 和coroutine 有何差別?(4 分)