ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
另举一个泛化的例子:想象一下,你需要一个可以打印任意长度的乘法表,而不仅仅是6×6的表。你可以为printMultTable添加一个参数: ~~~ void printMultTable (int high) { int i = 1; while (i <= high) { printMultiples (i); i = i + 1; } } ~~~ 我用参数high替代6。如果我用参数值7调用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 ~~~ 一切很好,除了一点:我可能想让这个表变为方阵(行数和列数一样)。这意味着我需要为printMultiples添加另一个参数来指定表的列数。 絮叨几句,我也把这个参数命名为high,说明了不同函数可以有相同名字的参数(如同局部变量): ~~~ 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; } } ~~~ 注意,当我添加一个新的参数,我必须改变函数的第一行(即接口或原型),同时必须修改printMultTable中调用函数的地方。正如所料,这段程序生成了一个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 ~~~ 当你适当的泛化一个函数以后,你常常会发现程序的输出结果有一些意外的性质。比如,你可能注意到了,乘法表示对称的,因为ab=ba,所以表中所有的项都出现了两次。你可以只打印半张表以省墨。将 ~~~ 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 ~~~ 至于其工作原理,就留给你分析了。