C++ 第二次作业 函数总结

第二次作业 C++函数总结

函数总结

1.为什么要用函数?

通常将相对独立的,经常使用的功能抽象为函数。
函数编写完成后,可以被重复使用,使用时可以只关心函数的功能和使用方法而不必担心函数功能的具体实现。这样有利于代码重用,可以提高开发效率,增强程序的可靠性,也便于分工合作和修改维护。

类型标识符 函数名(形式参数表)
{
语法序列
}

例如:编写一个求X的n次方的函数

double power(double x,int n){
double val=1.0;
while(n--)
val*=x;
return val;
}

2.为什么要用函数重载?

一、定义

两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数的过程。

使用函数重载的理由

如果没有重载机制,那么对不同类型的数据进行相同的操作也要定义名称完全不同的函数。

二、应用

(1)
int add(int x,int y);

`float add(float x,float)`

形参个数不同

(2)int add(int x,int y);

int add(int x,int y,int y);

实参个数不同

3.什么是值传递

一、定义

值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这是一个单向的值传递过程,形参的值将不会再影响实参。

二、应用

void swap(int a,int b)
{
int t=a;
a=b;
b=t;
}

分析:由于值传递是一个单向的传递过程,所以上述函数并没有达到其交换的目的。 形参的值无法对实参有改变的作用。

4.什么是地址传递

一、定义

按地址传递:在调用某一个过程时,是把实参变量的内存地址传递给被调用过程的形参,也就是说形参与实参使用相同地址的内存单元。因此当在被调用过程中改变形参的值,就等于改变了实参的值。

二、应用

void Change(int* n)
{
    *n = *n + 1;
}

即将实参的地址给予形参,改变形参的值从而改变实参的值。

5.如何编写递归函数

一、定义

简单地说,递归函数是直接或间接调用函数本身的函数。

二、应用

(1)斐波那契数列

int Fun(int n)
{
if(n < 1) 
{
return 0;
}
else if(n == 1 || n == 2)
 {
return 1;
}
else
{
return f1(n-1) + f1(n-2);
}
}

分析:上述函数即为典型的递归调用自身的函数。每一项等于前两项之和

(2)求n!。

void jiecheng(int n)
{
if(n==0) 
return 1;
else 
return jiecheng(n-1)*n;
}

总结

递归的过程有如下两个阶段。

第一阶段:递推

将原问题不断分解为新的子问题,逐渐从未知向已知推进,最终达到已知的条件,即递归结束的条件,此时递推阶段结束。

第二阶段:回归

从已知的条件出发,按照递推的你过程,逐一求值回归,最后达到递推的开始处,结束回归阶段,完成递归调用。

注意

对同一个函数的多次不同调用中,编译器会为函数的形参和局部变量分配不同的空间,他们互不影响

猜你喜欢

转载自www.cnblogs.com/nianshaomingtu/p/11519635.html
今日推荐