谁能帮本人看看这段递归代码为什么错误,调试好多遍了

C语言 码拜 8年前 (2016-06-05) 921次浏览
#define N 10
void show(int(*a)[N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
printf(“%3d”, a[i][j]);
}
printf(“\n”);
}
}
void loop5(int(*a)[N], int i, int j, int k)
{
static max = 0;
static temp = 1;
if (k>=(N+1)/2)
{
return;
}
else
{
if (j < N – k)
{
a[i][j++] = temp++;
max=1;
return  loop5(a, i, j, k);
}
if (max == 1)
{
j–;
i++;
}
if (i < N – k)
{
a[i++][j] = temp++;
max = 2;
return loop5(a, i, j, k);
}
if (max == 2)
{
i–;
j–;
max = 0;
}
// if (j >= k)
// {
// a[i][j] = temp++;
// max = 3;
// return loop5(a, i, j – 1, k);
// }
// if (max == 3)
// {
// j++;
// i–;
// max = 0;
// }
//
//
// if (i > k)
// {
// a[i][j] = temp++;
// max = 4;
// return loop5(a, i – 1, j, k);
// }
// if (max == 4)
// {
// i++;
// j++;
// max = 0;
// }
return loop5(a, i, j, k + 1);
}
}
void main()
{
int a[N][N] = { 0 };
loop5(a, 0, 0, 0, 0);
show(a);
system(“pause”);
}
里面的4段递归,前面2段 显示是正确,后面这2段 不知道为什么一起运行就错误,求高手帮看看 哪里错了?还是说整个递归本来就有问题 只是本人没发现?
解决方案

2

单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出

18

你代码没帮你调试,初步看了下
loop5 不是只有4个参数,为何主函数中调用时有5个参数
其次是提示什么错误,检查能否递归太深导致栈溢出

5

你这个递归函数要干嘛?
1     2    3    4       5       6      7    8      9
18  17 ·····································10
················
这样的数列?

5

#define N 10
void show(int(*a)[N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
printf(“%7d”, a[i][j]);
}
printf(“\n”);
}
}
void loop5(int(*a)[N], int i, int j, int k)
{
static max = 0;
static temp = 1;
if (k>=(N+1)/2)
{
return;
}
else
{
if (j < N – k)
{
a[i][j++] = temp++;
max=1;
loop5(a, i, j, k);
}
if (max == 1)
{
j–;
i++;
}
if (i < N – k)
{
a[i++][j] = temp++;
max = 2;
loop5(a, i, j, k);
}
if (max == 2)
{
i–;
j–;
max = 0;
}
loop5(a, i, j, k + 1);
}
}
void main()
{
int a[N][N] = { 0 };
show(a);
loop5(a, 0, 0, 0);
show(a);
system(“pause”);
}
谁能帮本人看看这段递归代码为什么错误,调试好多遍了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明谁能帮本人看看这段递归代码为什么错误,调试好多遍了
喜欢 (0)
[1034331897@qq.com]
分享 (0)