函数(参数传递)、普通/static局部/全局变量、递归

一、函数
返回值:必须与返回类型一致
函数名:通常大写用以与库函数区分
形参参数列表:实参—副本—>形参(对形参的操作不会影响实参)
(1)值传递
(2)地址传递
(3)引用传递

void swap1(int x, int y)    
{  
  int tmp=x;  
  x=y;  
  y=tmp; //将x,y进行对调 
  print(“x=%d, y=%d\n”, x, y);//x=7, y=2  
}
void main()  
{  
  int a=2,b=7;  
  swap1(a,b) ;  
  printf(“a=%d, b=%d\n”, a, b); //a=2, b=7 
} 
void swap2(int *px, int *py)  
{  
  int tmp=*px;  
  *px=*py;  
  *py=tmp; //即px=&a; py=&b;
  print(“*px=%d, *py=%d\n”, *px, *py);  //*px=7, *py=2
} 
void main()  
{  
  int a=2;  
  int b=7;  
  swap2(&a,&b);  
  Print(“a=%d, b=%d\n”, a, b);// a=7, b=2 
}  
void swap3(int &x, int &y)  
{  
  int tmp=x;  
  x=y;  
  y=tmp; // 即x,y分别引用了a,b变量,对x、y的操作相当于对a、b的操作
  print(“x=%d, y=%d\n”, x, y);  //x=7, y=2
}
void main()  
{  
  int a=2;  
  int b=7;  
  swap3(a,b);  
  Print(“a=%d, b=%d\n”, a, b); // a=7, b=2
}

二、普通/static局部变量 与 普通/static全部变量
这里写图片描述
extern 关键字:用于引入外部变量符号

  extern int a;
  extern int arr[3];
  extern int *arr;//表示arr[0]元素  

三、递归
1、递归条件:
(1)由趋近于终止的条件
(2)调用自己本身(会保存线程,即当前数据)
(3)发生在栈中,禁止栈溢出
2、应用:
(1)汉诺塔:移动2^n - 1次(n为盘子总数)

#include <stdio.h>  
//第一个塔为初始塔A,中间的塔为借用塔B,最后一个塔为目标塔C  
int i=1;//记录步数  

//将编号为n的盘子由from移动到to  
void move(int n,char from,char to) 
{
    printf("第%d步:将%d号盘子%c---->%c\n",i++,n,from,to);  
}  

//将n个盘子由初始塔移动到目标塔(利用借用塔)  
void hanoi(int n,char from,char denpend_on,char to)
{  
    if (n==1)  
    move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地  
    else  
    {  
      hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上  
      move(n,from,to);              //将剩下的一个盘子移动到目的塔上  
      hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上  
    }  
}  
void main()  
{  
     printf("请输入盘子的个数:\n");  
     int n;  
     scanf("%d",&n);  
     char x='A',y='B',z='C';  
     printf("盘子移动情况如下:\n");  
     hanoi(n,x,y,z);  
}  

(2)斐波那契数列 Fibonacci:效率:循环>>递归

int FibonacciNum(int n)
{  
    if(n < 0)
    {  
        return -1;  
    }  
    if(n == 0) 
    {  
        return 0;  
    } 
    else if(n == 1) 
    {  
        return 1;  
    } 
    else  
    {  
        return(FibonacciNum(n-1) + FibonacciNum(n-2));  
    }  
}  
int FibonacciNum(int n)
{
    int i1 = 1;
    int i2 = 1;
    int i3= 1;
    for(int j = 2; j < n; j++)
    {
         i3 = i1 + i2;
         i1 = i2;
         i2 = i3;
    }
    return i3;
}

猜你喜欢

转载自blog.csdn.net/qq_39191122/article/details/79658965
今日推荐