一.为什么要用函数
1.把大的编程任务用函数划分成若干个小任务,使程序流程结构化。
2.在需要使用同样算法的时候,避免了写大量重复的代码。
二.为什么要用函数重载
C++允许功能相近的函数在相同的作用域内以相同的函数名声明,从而形成重载,方便使用,便于记忆。
减少了函数名的数量与程序复杂性,提高用户使用体验
例:
//返回值不同
int add(int x,int y);
float add(float x,float y);
//参数类型不同
int add(int x,int y);
int add(int x,int y,int z);
注:编译器不以形参名与返回值作为区分重载函数的因素。不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。
三.什么是值传递
例:输入两个整数交换后输出
void swap(int a,int b)
{
int t=a;
a=b;
b=t;
}
int main()
{
int x=5,y=10;
cout<<"x = "<<x<<"y = "<<y<<endl;
swap(x,y);//a与b的值传给了x和y,对形参值的改变无法影响实参
cout<<"x = "<<x<<"y = "<<y<<endl;
return 0;
}
//结果为x=5 y=10
因为是值传递,所以此程序只能做到a,b的值进行交换,而x,y的交换失败。
四.什么是地址传递
例:
//修改上题中swap函数,程序运行成功
void swap(int &a,&int b)//此处更改为引用类型
{
int t=a;
a=b;
b=t;
}
引用不占有独立的内存空间,只是别名,将实参变量与引用进行关联,从而使他们的数值可以传递。
5.如何编写递归函数
递归函数即函数的每次调用都要用到自身
例:使用递归编写斐波那契数列
#include<iostream>
using namespace std;
int F(int n)
{
if (n < 0)
return 0;
if (n == 0 || n == 1)
return n;
else
return F(n - 1) + F(n - 2);
}
int main()
{
int n;
cout << "input:";
cin >> n;
cout << "F("<<n<<")="<<F(n) << endl;
}
但使用递归,程序运算量庞大,效率低,多数递归程序可以使用迭代代替。