c++第二次作业

函数

本章探讨

1.为什么要用函数

2.为什么要用函数重载

3.什么是值传递

4.什么是地址传递

5.如何编写递归函数

为什么要用函数

1.函数可以让我们的主程序更加简便。
2.函数可以反复调用,减少了程序的整体复杂性。

例如我们计算a的n次方:

#include<iostream>
using namespace std;
int power(int x,int y)
{
       int i;
       int s=1;
       for(int i=y;i>=1;i--)
       {
             s*=x;
       }
       return s;
 }
 int main()
 {
     int x,n;
     cin>>x>>n;
     cout<<power(x,n)<<endl;
     return 0;
 }

为什么要用函数重载

若没有函数重载,我们在运用同种功能的函数而定义不同的名字,这给我们造成了极大的不便。

例如:

#include<iostream>
using namespace std;
int sum(int a.int b)
{
    return a+b;
}
double sum(double a,double b)
{
    return a+b;
}
int main()
{
     int a,b,c,d;
     cin>>a>>b;
     cout<<sum(a,b)<<endl;
     cin>>c>>d;
     cout<<sum(c,d)<<endl;
     return 0;
}

什么是值传递

这种情况下,在调用函数时,将实际参数复制一份传到函数中,在函数中对参数值进行修改时不会改变实际参数。
例如:

#include<iostream>
using namespace std;
void fun(int a,int b)
{
     int t=a;
         a=b;
         b=t;
}
int main()
{
    int a,b;
    cin>>a>>b;
    fun(a,b);
    cout<<a<<" "<<b<<endl;
    return 0;
}

什么是地址传递

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

#include <iostream>
using namespace std;

void swap(int *x,int *y);
int main(){
    int x,y;
    x=1;y=2;
    cout << "          x=" << x << " y=" << y << "\n";
    swap(&x,&y);
    cout << "after swap: x=" << x << " y=" << y <<endl;
    return 0;

}

void swap(int *x,int *y){
    int t=*x;
        *x=*y;
        *y=t;
}

递归函数

递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。 所以递归要有两个要素,结束条件与递推关系

注:
递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当被调函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出。
例如:

#include<iostream>
using namespace std;
int fun(int n)
{
      if(n==0||n==1)
        return 1;
      else
          return n*fun(n-1);
}
int main()
{
    int n;
    cin>>n;
    cout<<n<<"的阶乘为"<<fun(n)<<endl;
    return 0;
}

注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。

posted @ 2019-09-15 14:31  七岁就很酷  阅读(138)  评论(0编辑  收藏  举报