函数

1:为什么要使用函数

函数指得是一中提前定义好的算法,当我们需要调用此种算法时只需要将你所需要的值带入函数中变回按照对应的算法自行进行计算,那么我们为什么要使用函数呢?是因为函数能够达到的目的我们直接不能直接做到吗?其实并不是的,我们都知道在一些大型的程序中同样的一个算法可能需要带入很多不同的数据那么当我们要计算结果时如果一一吧这些数据按照固定的算法计算的话会带来很大的计算量,所以我们便采用了函数,运用函数以后我们只需要将这种算法进行提前编写并且将要进行计算的值带入其中后计算机就会自动完成剩下的工作,所以函数的应用给我们带来的极大的方便并且提高了软件的运行速率。

2:为什么要用函数重载

函数的重载指的是两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。那么函数的重载有什么用呢?其实函数的重载可以解决要使用多个功能相似的函数但是却要用于不同数据类型的情况并且同时避免定义函数的数目过多。例如下面这个例子

计算任意float或int数值的合

#include<iostream>
using namespace std;
int abc(int a, int b)
{
    int sum;
    sum = a + b;
    return sum;
}
float abc(float a, float b)
{
    float sum;
    sum = a + b;
    return sum;

}
float abc(float a, int b)
{
    float sum;
    sum = a + b;
    return sum;
}
float abc(int a, float b)
{
    float sum;
    sum = a + b;
    return sum;

}
void main()
{
    int a, b;
    float c, d;
    double sum1,sum2,sum3,sum4;
    cout << "请输入a b c d的值" << endl;
    cin >> a  >> b  >> c  >> d;
    sum1 = abc(a, b);
    sum2 = abc(c , d);
    sum3 = abc(a, d);
    sum4 = abc(b, c);
    cout <<"a和b的合为"<< sum1 << endl<<"c和d的合为" << sum2 <<endl<<"a和d的和为"<<sum3<<endl<<"b和c的和为"<<sum4<< endl;
}

1785040-20190915093145613-1862632531.png

如图所示我在计算int或者float类型中任意两种时并没有输入四个对应不同函数而是采用了相同的函数名abc,而系统则会自动根据你所输入的数据类型或者数据个数进行自动的匹配,而这就是函数的重载以及它的优势

3:什么是函数的值传递

函数值的传递是指直接将实际的参数的值赋给形式参数,并进行相应的计算,在赋值过程中如果对参数的值进行了改变是不会影响到实际参数的值,如下面的例子

#include<iostream>
using namespace std;
void abc(int a)
{
    a = a + 1;

}
void main()
{
    int a = 5;
    cout << "带入函数前值为" << a << endl;
    abc(a);
    cout <<"带入函数后值为"<< a << endl;
}

1785040-20190915093218368-1070089301.png

可以看到运行后a的值并没有改变,所以值传递并不能改变原来参数的值

4:什么是地址传递

当调用函数时把参数的地址传递给函数,这时实参和形参公用内存中的同一单元,所以在函数中进行的改变会影响到实际参数,下面给出一个例子

#include<iostream>
using namespace std;
void abc(int *a)
{
    *a = *a + 1;

}
void main()
{
    int a = 5;
    cout << "带入函数前值为" << a << endl;
    abc(&a);//将地址传入
    cout <<"带入函数后值为"<< a << endl;
}

1785040-20190915093243642-819099895.png

可以看到传入地址后在函数中改变的参数值实际影响到了实际参数,这就是函数的地址传递

5.设计实验和教案,分析如何编写递归函数

递归调用指的是函数在使用的过程中可以直接或者间接的掉用自己本身,例如下面这个例子

采用递归的方法计算fib数列的值

#include<iostream>
using namespace std;
int fib(int n)
{
    if (n == 1 || n == 2)//终止条件
        return 1;
    else
        return fib(n - 1) + fib(n - 2);
}
void main()
{
    int a;
    cout << "请输入一个大于等于3的整数" << endl;
    cin >> a;
    int b = fib(a);
    cout << "计算所得的fib级数为" << b << endl;
}

1785040-20190915093315500-1441551573.png

如上图所示计算fib数列的过程中当n!=1或者n!=2的时候函数就会继续执行并且调用自身进行相应的计算,这就是函数的递归调用,在一个函数中对函数本身进行了调用,函数的递归算法可以可以在很大程度上减少算法的复杂性,并且简化代码。在我们编写递归函数的时候要特别关注的是递归的条件,要将递归条件设置准确,不然在调用的时候会产生一个死循环

转载于:https://www.cnblogs.com/bjfybjn/p/11521180.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值