递归函数,变量定义在全局出错,局部正确
情况,这是一个NOIP的问题,做这个题的时候发现一个问题,TX和TY如果定义为全局变量,在DEVC++中会非法操作,在VS中虽然不出错但是结果不正确,但如果定义为局部变量,就不会出现问题,出错代码如下:
如果把这两个变量定义为局部变量,就可以得到正确结果:
测试数据:5 4 0 0,
正确结果:32
#include<iostream>
#include<memory.h>
using namespace std;
int arr[11][11]={0};
int t,n,m,x,y,tx,ty,cnt=0; //***********************
//x在前
int dir[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
//点x,点y,计数
void Dfs(int x,int y,int ans){ //重命名了 ,但是局部变量优先级高于全局,代码逻辑没错误
if(ans==m*n){
cnt++;
}else{
for(int i=0;i<8;i++){
tx=x+dir[i][0]; //**************
ty=y+dir[i][1]; //**************
if(tx>=0 && tx<n && ty>=0 && ty<m && arr[ty][tx]!=1){ //m, 打成n了
arr[ty][tx]=1;
Dfs(tx,ty,ans+1);
arr[ty][tx]=0;
}
}
}
}
int main(){
cin>>n>>m>>x>>y;
memset(arr, 0, sizeof(arr));
cnt=0;
arr[y][x]=1; //1=走过
Dfs(x,y,1);
cout<<cnt<<endl;
return 0;
}
如果把这两个变量定义为局部变量,就可以得到正确结果:
#include<iostream>
#include<memory.h>
using namespace std;
int arr[11][11]={0};
int t,n,m,x,y,cnt=0;
//x在前
int dir[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
//点x,点y,计数
void Dfs(int x,int y,int ans){ //重命名了 ,但是局部变量优先级高于全局,代码逻辑没错误
if(ans==m*n){
cnt++;
}else{
for(int i=0;i<8;i++){
int tx=x+dir[i][0]; //未知问题,变量定义在这里使用栈空间就没问题了.
int ty=y+dir[i][1]; //占用全局变量空间就会发生错误
if(tx>=0 && tx<n && ty>=0 && ty<m && arr[ty][tx]!=1){ //m, 打成n了
arr[ty][tx]=1;
Dfs(tx,ty,ans+1);
arr[ty][tx]=0;
}
}
}
}
int main(){
cin>>n>>m>>x>>y;
memset(arr, 0, sizeof(arr));
cnt=0;
arr[y][x]=1; //1=走过
Dfs(x,y,1);
cout<<cnt<<endl;
return 0;
}
测试数据:5 4 0 0,
正确结果:32
...全文
相关推荐
C语言难点及分析加字
根据题目描述,我们可以将变量的存储类别分为两大类:1. **静态存储类别**: - **静态局部变量**:这类变量定义于函数内部,但其生存期贯穿整个程序执行过程。即使函数退出后,其值也会被保留下来。
(完整版)c语言函数练习题附答案(可编辑修改word版).docx
函数定义的正确形式。正确的函数定义需要指定返回类型、函数名以及用括号括起来的参数列表。参数列表中每个参数都需要声明类型,并用逗号分隔。此外,函数体内可以使用局部变量,这些变量只在函数执行期间存在。
华为C语言编程规范
**7.3 局部变量:**- 描述了局部变量的使用规则,如生命周期、作用域等。**7.4 全局变量:**- 对全局变量的使用进行了限制,避免过度依赖全局状态。
python函数局部变量、全局变量、递归知识点总结
本文档主要介绍了Python中关于函数局部变量、全局变量以及递归的相关知识点。在Python编程中,变量的作用域是决定它们在代码中可见性和生命周期的关键概念。1. **全局变量**: - 全
MATLAB自定义函数及局部变量.docx
MATLAB中,变量可以分为局部变量和全局变量。


