更新时间:2017-06-29 10:31:02浏览次数:1+次
C++ Primer Plus 清单7.17中
void subdivide(char ar[],int low,int high,int level);
const int Len = 66;}
运行后打印的 '|'不一样,Divs 改成10也显示为6行,而且在关闭Dos窗口弹出另外一个忽略/中断窗口
您好,感谢您对C++技术网的支持和信任。
很不幸的告诉你,通过仔细的研究和证实,书错了。下面是正确的结果的截图:
纠正的代码如下:
void subdivide(char ar[],int low,int high,int level)
{
if(level ==0)
return ;
int mid = (high + low) /2;
ar[mid] = '|';
subdivide(ar,low,mid,level - 1);
subdivide(ar,mid,high,level -1);
}
或者自己改动代码:
void subdivide(char ar[],int low,int high,int level)
{
if(level ==0)
return ;
int mid = (high - low) /2;
//ar[mid] = '|';
//subdivide(ar,low,mid,level - 1);
//subdivide(ar,mid,high,level -1);
ar[mid + low] = '|';
subdivide(ar, low, mid + low, level - 1);
subdivide(ar, mid + low, high, level - 1);
}
问题在于算法。对于中点的定位计算错误,得不到预期的结果,还导致递归产生栈(Stack)错误。
作者应该不会出现这个基本问题,估计是书在复印(影印)的时候,将+号印成了-号,如果你现在看的不是正版的书,建议还是看正版的纸质书,以免再出现这样的问题。
相关资讯