Re: [問題] 九九乘法表不用迴圈是叫我直接從1列到81?
: 不用迴圈叫我列九九乘法表是哪招?
: 說實在我真想不到不用迴圈就能簡單列出九九乘法表的方法了
不用 iteration,就用 recursion,順便預測出題者還不准你用乘法操作。
這裡提供一份實作程式碼:
#include <stdio.h>
int mul(int x, int y) {
if (!x || !y) return 0;
return x + mul(x, y - 1);
}
void table_row(int x, int y) {
if (y > 1) table_row(x, y - 1);
printf("%d x %d = %2d | ", x, y, mul(x, y));
}
void mult_table(int x, int y) {
if (x > 1) mult_table(x - 1, y);
table_row(x, y);
printf("\n");
}
int main() {
mult_table(9, 9);
return 0;
}
參考輸出:
1 x 1 = 1 | 1 x 2 = 2 | 1 x 3 = 3 | 1 x 4 = 4 | 1 x 5 = 5 ...
2 x 1 = 2 | 2 x 2 = 4 | 2 x 3 = 6 | 2 x 4 = 8 | 2 x 5 = 10 ...
3 x 1 = 3 | 3 x 2 = 6 | 3 x 3 = 9 | 3 x 4 = 12 | 3 x 5 = 15 ...
...
9 x 1 = 9 | 9 x 2 = 18 | 9 x 3 = 27 | 9 x 4 = 36 | 9 x 5 = 45 ...
乍看可滿足題目要求,不過仍有大量改進空間:
1. 乘法實作可避免大量重複的加法;
2. 九九乘法中 3 * 8 和 8 * 3 的輸出數值相等,這類運算也可避免;
3. 實作用到三個遞迴函式,可縮減;
4. if (x > 1) 和 if (y > 1) 這類比較也可縮減次數,甚至免去比較
(美妙的 bitwise 操作);
5. 改善輸出的排版;
我想將上述改進項目丟給學生當作業 (*笑*)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.82.61
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532110905.A.FBD.html
推
07/21 07:29,
6年前
, 1F
07/21 07:29, 1F
推
07/21 07:46,
6年前
, 2F
07/21 07:46, 2F
推
07/21 09:04,
6年前
, 3F
07/21 09:04, 3F
推
07/21 09:09,
6年前
, 4F
07/21 09:09, 4F
推
07/21 09:59,
6年前
, 5F
07/21 09:59, 5F
推
07/21 10:05,
6年前
, 6F
07/21 10:05, 6F
推
07/21 11:10,
6年前
, 7F
07/21 11:10, 7F
推
07/21 11:59,
6年前
, 8F
07/21 11:59, 8F
推
07/21 12:49,
6年前
, 9F
07/21 12:49, 9F
推
07/21 23:11,
6年前
, 10F
07/21 23:11, 10F
推
07/22 12:53,
6年前
, 11F
07/22 12:53, 11F
推
07/23 00:18,
6年前
, 12F
07/23 00:18, 12F
推
07/23 09:35,
6年前
, 13F
07/23 09:35, 13F
推
07/29 18:09,
6年前
, 14F
07/29 18:09, 14F
推
08/28 00:18,
6年前
, 15F
08/28 00:18, 15F
推
08/28 04:34,
6年前
, 16F
08/28 04:34, 16F
推
10/21 23:15, , 17F
10/21 23:15, 17F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 13 之 29 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章