前言
這在我高二就有做過了,不過舊的那篇只有放code,沒講實作細節跟原因,在這裡補上。
問題 1
請實作一函數,不得使用乘法、除法、for、while、goto、if-else、switch、case、條件運算子等,算出$\sum^n_{i = 1} i$。
思考
如果不能使用迴圈,就只能往遞迴的方向思考。
1 | int sum(int n) |
標準遞迴
但是遞迴受限於條件判斷來中止,若是有辦法替換條件判斷的語句才可以實現。
這個解答大概要看過才知道。
陣列可以存指標,而C++存在函式指標,利用這個就可以判斷終止條件。
1 | // 定義函式指標為"Func" |
函式指標解
如果懂一點物件導向,應該知道”多型”的概念。
1 | class animal |
標準多型概念
同樣利用陣列也可以達成跟函式指標一樣的效果。
1 | // 定義父類 |
多型解
問題 2
請實作一函數,不得使用乘法、除法、for、while、if-else、switch、case、條件運算子,算出$gcd(a, b)$。
思考
同樣利用上面的模式
1 | // 定義函式指標為"Func" |
函式指標解
1 | // 定義父類 |
多型解