您的位置:首页 > 其它

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

2018-03-22 21:08 344 查看
一、函数

返回值:必须与返回类型一致

函数名:通常大写用以与库函数区分

形参参数列表:实参—副本—>形参(对形参的操作不会影响实参)

(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐