我正试图在我的控制台中用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)(中心线),然后我必须放另一条线,但我有两条线,另外两条线在每个中间。
有人知道这样做吗?或者我如何将其转换为非递归算法?
由于 最好的问候
答案 0 :(得分:1)
想象一下实数行上的段[0,1],并评估标尺(0,1, n ):
...
对于标尺( l , r , n ),这些分数将相同,但相反例如,3/4,你将把标记放在 a 和 b 之间的四分之三处。这只是: l +( r - l )* 3/4。
将此方法转换为C代码,我们可以非递归地编写您的函数:
void ruler(int l, int r, int n) {
int step, num, denom;
for (step = 1; step <= n; step++) {
denom = 1 << step;
for (num = 1; num < denom; num += 2)
mark(l + (r-l) * num / denom, n - (step - 1));
}
}