user-0 提问: 谁能帮我看看这段递归代码为什么错误，调试好多遍了

回复:
user: user-0
content: 引用 9 楼 FFY_1208 的回复:你这个是C语言，循环里不可以加定义的.主函数里的实参数量比你设置的形参数量多 疏忽了

user: user-0
content: 引用 2 楼 paschen 的回复:你代码没帮你调试，初步看了下  loop5 不是只有4个参数，为何主函数中调用时有5个参数  其次是提示什么错误，检查是否递归太深导致栈溢出  我居然没发现 疏忽了

user: user-0
content: 引用 8 楼 ilikehigame 的回复:#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"); }    这是原来的  我是想把他改成递归（新手 递归太差 所以想锻炼锻炼） void loop2(int(*a)[N])//while 循环 { 	int temp = 1; 	//i控制行，j控制列，k控制循环次数  算法：(N+1)/2 得到循环次数 	int i = 0, j = 0, k = 0; 	 	while (k < (N + 1) / 2) 	{ 		while (j < N - k)//左往右 		{ 			a[i][j++] = temp++; 		} 		j--; 		i++; 		while (i < N - k)//右往下 		{ 			a[i++][j] = temp++; 		} 		j--; 		i--; 		while (j >= k)//下往左 		{ 			a[i][j--] = temp++; 		} 		j++; 		i--; 		while (i > k)//左往上 		{ 			a[i--][j] = temp++; 		} 		i++; 		j++; 		k++; 	} 	show(a); }

user: user-1
content: 你这个是C语言，循环里不可以加定义的.主函数里的实参数量比你设置的形参数量多

user: user-2
content: #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"); }

user: user-1
content: 你的提示错误是什么？我初步看了一下，感觉你的递归有点错误，你的递归终止条件是什么？是k么？可是你的k的值没变啊。

user: user-3
content: http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and 风格就是一种笔格！

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

user: user-2
content: 引用 楼主 libinden71 的回复:#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段 不知道为什么一起运行就错误，求大神帮忙看看 哪里错了？还是说整个递归本来就有问题 只是我没发现？  loop5 的函数没有定义返回值但是过程总有return loop5

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

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

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