全局变量是在整个文件里面可以供其他函数调用的变量。是不用当做变量传进函数里面的,直接调用就可以了!
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
int a100=0,a50=0,a20=0,a10=0,a5=0,a1=0;
void digui(int n);
int main(void)
{
int n;
cin>>n;
digui(n);
//cout<<"cout"<<a100<<endl;
printf("%d
%d
%d
%d
%d
%d",a100,a50,a20,a10,a5,a1);
}
void digui(int n)
{
if(n-100>=0) {n=n-100;a100++;digui(n);}
else if(n-50>=0) {n=n-50;a50++;digui(n);}
else if(n-20>=0) {n=n-20;a20++;digui(n);}
else if(n-10>=0) {n=n-10;a10++;digui(n);}
else if(n-5>=0) {n=n-5;a5++;digui(n);}
else if(n-1>=0) {n=n-1;a1++;digui(n);}
}
上面这个代码是http://noi.openjudge.cn/ch0113/13/,13:人民币支付问题的AC代码。这里就是容易犯这个错误,如果代码改成下面这样:
void digui(int n,int a100,int a50,int a20,int a10,int a5,int a1)
{
if(n-100>=0) {n=n-100;a100++;digui(n);}
else if(n-50>=0) {n=n-50;a50++;digui(n);}
else if(n-20>=0) {n=n-20;a20++;digui(n);}
else if(n-10>=0) {n=n-10;a10++;digui(n);}
else if(n-5>=0) {n=n-5;a5++;digui(n);}
else if(n-1>=0) {n=n-1;a1++;digui(n);}
}
这样的话就是错误的,因为你的递归函数返回类型是void空类型,a100,a50等这些变量是作为参数传进去的,这些就不是全局变量,事实上,你可以把a100,a50这些变量改成a,b,c这样的变量,结果是一样的,因为这些都是传进去的参数,而不是全局变量。