标签:fun 间接 主程序 stream 效率 计算 代码量 png 其他
把一些计算或操作编成通用的函数,以供随时调用,从而避免了代码的重复冗长;简化代码量,对各个部分进行封装,使问题变得简单而且直观,提高了程序的易读性。
如果我们把主程序拆分成许多个步骤,为每一个功能编写一个函数,那么根据函数的函数名每个函数的功能就非常清晰了。如果我们要修改某一个函数的功能,其他的函数也丝毫不会受到影响。
设计一个规模很大的程序,它有几千项功能,若把他们都放在一个主函数里,就只能由一个人来编写。但如果我们把这几千项功能分拆为一些函数,分给几百个人去编写,最后用主函数把这些完成的函数组织一下,一个程序就可以很快完工。
在程序中运用函数,就需要传递参数,开辟缓存、堆栈等,相比较而言,这个歌过程会耗一些多余的效率。
与返回值的类型无关
重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。当函数的编写者充分考虑了不同情况下应该运行稍有不同的函数,函数的使用者就不必为这些小细节而烦恼了。
void fun(int length,int weight = 2,int height = 33); //由于weight和height具有默认初始值,只需要一个参数length即可调用函数
void fun(int length); //只需要参数length即可调用函数
/*此时,对于语句fun(1),编译器会指出语法错误*/
形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
int fun(int x);
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
int fun(int *x);
形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
int fun(int &x);
#include < iostream >
using namespace std;
//值传递
void change1(int n) {
cout << "值传递--函数操作地址" << &n << endl; //显示的是拷贝的地址而不是源地址
n++;
}
//引用传递
void change2(int& n) {
cout << "引用传递--函数操作地址" << &n << endl; //显示的是源地址(即引用为别名)
n++;
}
//指针传递
void change3(int* n) {
cout << "指针传递--函数操作地址 " << n << endl; //显示的是源地址
*n = *n + 1;
}
int main() {
int n = 10;
cout << " n的地址" << &n << endl<< endl;
change1(n);
cout << "值传递结果 n=" << n << endl<< endl;
change2(n);
cout << "引用传递结果 n=" << n << endl<< endl;
change3(&n);
cout << "地址传递结果 n=" << n << endl<< endl;
return true;
}
#include< iostream >
using namespace std;
int F(int n){
if(n==0)//递归边界
return 1;
return n*F(n-1);//递归公式
}
int main(){
int n;
cin >> n;
cout << F(n) << endl;
return 0;
}
1)n == 1
第1次 1号盘 A---->C sum = 1 次
2) n == 2
第1次 1号盘 A---->B
第2次 2号盘 A---->C
第3次 1号盘 B---->C sum = 3 次
3)n == 3
第1次 1号盘 A---->C
第2次 2号盘 A---->B
第3次 1号盘 C---->B
第4次 3号盘 A---->C
第5次 1号盘 B---->A
第6次 2号盘 B---->C
第7次 1号盘 A---->C sum = 7 次
#include<iostream>
using namespace std;
void move(char src, char dest) { //移动函数
cout << src << "-->" << dest << endl;
}
void hanoi(int n, char src, char mid, char dest) {
if (n == 1) move(src, dest);
else {
hanoi(n - 1, src, dest, mid); //把上面的n-1个移动到备用柱子
move(src, dest); //把第n个移动到目标柱子
hanoi(n - 1, mid, src, dest); //把备用柱子上的n-1个移动到目标柱子
}
}
int main() {
int m;
cout << "enter the num:"; //输入环个数
cin >> m;
hanoi(m, 'A', 'B', 'C');
return 0;
}
标签:fun 间接 主程序 stream 效率 计算 代码量 png 其他
原文地址:https://www.cnblogs.com/TSmeredithH/p/11529942.html