------- android培训、java培训、iOS培训、.Net培训、期待与您交流! ----------
1、函数的概念
完成特定功能的代码段,它也是组成我们C语言源程序的基本单位
优点:
1)高程序的可读性
2)可以高开发的效率
3)提高代码重用性
2、函数的定义格式:
返回值 函数名(形参列表){
函数体;
//return
}
按照有参数和返回值可分为四种:
有参无返回值:void test(int x,float y){ }
无参无返回值:void test1(){ }
有参有返回值:int max(int x,int y){ return x>y?x:y; }
无参有返回值:int test2(){ return 10;}
3、函数的参数
1)形参和实参
形参:在定义函数的时候,函数名后面小括号中的参数
void test(int x,float y){ }
实参:调用函数的时候传递的参数
max(56,78); //56、78就是两个实际参数
2)参数的传递过程实质是,将实参的值拷贝一份放到函数形参中
4、函数的返回值
主调函数:
A、B两个函数 ,如果在A中调用了B,A为主调函数,B为被调函数。
被调函数:
1) return 0; return (0);
2) return a+b; return a>b?a:b;
3) 如果函数的返回值是 void return ;(程序返回了,不再向下执行)
4) 函数中可以有多个return,但是只有一个起作用。
5、函数的调用
1)函数的声明:
为什么要进行声明?
类似于变量的使用,我们要使用函数,就应该先定义函数,编译器不知道我们是否已经定义了某个函数,为了防止编译器编译的时候报错(函数调用),所以要告诉编译器,我已经定义了哪些函数。
原则:
在调用函数之前,进行该函数的声明。
声明的方法:
技巧:复制函数的头部,加上分号,写在调用方法之前
int max(int x,int y); //声明
2)函数的调用:
格式:函数名(实参列表);
max(56,78); //调用
6、递归函数
一个函数在它的函数体内调用它自身称之为递归函数。
构成条件:
1)自己调用自己
2)存在一个条件能够让递归结束
3)能够找到一个规律,让要解决的问题的规模缩小
递归函数的执行有两个阶段:
1)递推阶段:问题规模缩小的过程
2)回归迭代:迭代计算值的过程
递归的优点和缺点:
优点:遇到问题规模能够缩小,而且有规律的问题的时候,代码比较简洁。
缺点:太耗内存
建议:在程序中不能用太多
#include <stdio.h>
//用递归法求n得阶乘
// 5!
// 5*4!
// 第一个:递归退出的条件:1! = 1
// 第二个:n! = (n-1)!*n
// 第三个:自己调用自己
int jieCheng(int n){
int ji;
//判断n==1,如果n=1,阶乘的结果就是1
if (n==1) {
ji = 1;
}else{
//如果n != 1,前一个数的阶乘乘以当前的n的值
ji = jieCheng(n-1)*n;
}
return ji;
}
//求 x的y次方
int xy(int x,int y){
int ji;
//判断y==1
if (y==1) {
ji = x;
}else{
// 如果y !=1 此时,计算x的y-1次方 乘以 x
// x y x y-1 *x
// 2^3 2^2 *2
ji = xy(x,y-1)*x;
}
return ji;
}
int main(int argc, const char * argv[]) {
// int ji = jieCheng(8);
int ji = xy(2,7);
printf("ji = %d\n",ji);
return 0;
}