函数(参数传递)、普通/static局部/全局变量、递归
2018-03-22 21:08
344 查看
一、函数
返回值:必须与返回类型一致
函数名:通常大写用以与库函数区分
形参参数列表:实参—副本—>形参(对形参的操作不会影响实参)
(1)值传递
(2)地址传递
(3)引用传递
二、普通/static局部变量 与 普通/static全部变量
extern 关键字:用于引入外部变量符号
三、递归
1、递归条件:
(1)由趋近于终止的条件
(2)调用自己本身(会保存线程,即当前数据)
(3)发生在栈中,禁止栈溢出
2、应用:
(1)汉诺塔:移动2^n - 1次(n为盘子总数)
(2)斐波那契数列 Fibonacci:效率:循环>>递归
返回值:必须与返回类型一致
函数名:通常大写用以与库函数区分
形参参数列表:实参—副本—>形参(对形参的操作不会影响实参)
(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; }
相关文章推荐
- static 全局变量与普通的全局变量的区别/static局部变量和普通局部变量的区别/static函数与普通函数的区别[转]
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通全局变量的区别?static局部变量与普通局部变量的区别?static全局函数与普通全局函数的区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量、static局部变量和普通局部变量、static函数与普通函数的区别
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- (转载)static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量?static局部变量和普通局部变量?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量的区别/static局部变量和普通局部变量的区别/static函数与普通函数的区别
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量和普通局部变量的区别,static函数与普通函数的区别
- static全局变量与普通全局变量的区别,static局部变量与普通局部变量的区别,static函数与普通函数的区别
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?