函数

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;
}

如图所示我在计算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;
}

可以看到运行后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;
}

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

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;
}

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

posted @ 2019-09-15 09:40  不见风雨不见你  阅读(173)  评论(0编辑  收藏  举报