C++ 再說(shuō)泛化

2023-03-20 15:54 更新

另舉一個(gè)泛化的例子:想象一下,你需要一個(gè)可以打印任意長(zhǎng)度的乘法表,而不僅僅是6×6的表。你可以為printMultTable添加一個(gè)參數(shù):

void printMultTable (int high) {
    int i = 1;
    while (i <= high) {
        printMultiples (i);
        i = i + 1;
    }
}

我用參數(shù)high替代6。如果我用參數(shù)值7調(diào)用printMultTable,我將得到輸出:

1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
7 14 21 28 35 42

一切很好,除了一點(diǎn):我可能想讓這個(gè)表變?yōu)榉疥嚕ㄐ袛?shù)和列數(shù)一樣)。這意味著我需要為printMultiples添加另一個(gè)參數(shù)來(lái)指定表的列數(shù)。

絮叨幾句,我也把這個(gè)參數(shù)命名為high,說(shuō)明了不同函數(shù)可以有相同名字的參數(shù)(如同局部變量):

void printMultiples (int n, int high) {
    int i = 1;
    while (i <= high) {
        cout << n*i << " ";
        i = i + 1;
    }
    cout << endl;
}

void printMultTable (int high) {
    int i = 1;
    while (i <= high) {
        printMultiples (i, high);
        i = i + 1;
    }
}

注意,當(dāng)我添加一個(gè)新的參數(shù),我必須改變函數(shù)的第一行(即接口或原型),同時(shí)必須修改printMultTable中調(diào)用函數(shù)的地方。正如所料,這段程序生成了一個(gè)7×7的方陣:

1 2 3 4 5 6 7
2 4 6 8 10 12 14
3 6 9 12 15 18 21
4 8 12 16 20 24 28
5 10 15 20 25 30 35
6 12 18 24 30 36 42
7 14 21 28 35 42 49

當(dāng)你適當(dāng)?shù)姆夯粋€(gè)函數(shù)以后,你常常會(huì)發(fā)現(xiàn)程序的輸出結(jié)果有一些意外的性質(zhì)。比如,你可能注意到了,乘法表示對(duì)稱的,因?yàn)閍b=ba,所以表中所有的項(xiàng)都出現(xiàn)了兩次。你可以只打印半張表以省墨。將

printMultiples (i, high);

改為

printMultiples (i, i);

你將得到輸出:

1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49

至于其工作原理,就留給你分析了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)