【发布时间】:2015-04-11 14:35:18
【问题描述】:
我正在尝试在 c 中的控制台中绘制一条直线。
我有一个递归程序:
void mark(int m, int h) {
printf("set a mark at %d of length %d\n",m,h);
}
void ruler(int l, int r, int h) {
int m = (l+r)/2;
if (h>0) {
mark(m, h);
ruler(l, m, h-1);
ruler(m, r, h-1);
}
}
我必须画一条直线:
我的问题是我有第一行标记(4,3)(中心线),然后我必须再放一条线,但我有2条线,另外两条在中间。
有人知道怎么做吗?或者如何将其转换为非递归算法?
谢谢 最好的问候
【问题讨论】:
-
你能举一个你期望得到的例子吗?我对“......然后我必须换行”这句话感到困惑。您的递归程序,假设
mark函数正常工作,应该绘制中心线,将标尺分成两半并在每一半中放置一条中心线,依此类推。 -
如果我没看错:按原样打印“在长度为 3 的 4 处;在长度为 2 的 2 处;在长度为 1 的 1 处;在长度为 1 的 3 处;在长度为 2 的 6;长度为 1 的 5;长度为 1 的 7;",但是您想先打印长度为 3 的行,然后是长度为 2 的行,然后是长度为 1 的行?
-
你说得对,问题是,我必须打印所有长度为 2 的行,但程序在 2 行之间也给了我 1 行!
-
建议使用
ruler(l, m, h-1); mark(m, h); ruler(m, r, h-1);重新排序,以升序工作。
标签: c console console-application