关于全局变量

全局变量是在整个文件里面可以供其他函数调用的变量。是不用当做变量传进函数里面的,直接调用就可以了!

#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\n%d\n%d\n%d\n%d\n%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这样的变量,结果是一样的,因为这些都是传进去的参数,而不是全局变量。

转载于:https://www.cnblogs.com/myxdashuaige/p/8453151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值