C语言学习-函数和递归函数
C源程序是由函数组成的,有且只有一个主函数(main()函数)。
一、函数
1.自定义函数的书写格式:
返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…) { 函数体 }
例如:
1 include <stdio.h> 2 void test(); 3 4 int main() { 5 test(); 6 return 0; 7 } 8 9 void test() { 10 11 printf("hello world!"); 12 13 }
2.定义函数的目的
将一个函数封装起来,方便以后调用
3.定义函数的步骤
函数名:函数叫什么名字
函数体:函数是干啥的,里面包含了什么代码
返回值类型:函数执行完毕后返回什么给调用者
4.无参无返回值函数的定义
格式:
void 函数名() {
函数体;
}
例如:
void say(){ printf("说话了,你怎么的!"); }
5.无参有返回值函数的定义
格式:
返回值类型 函数名(){
函数体;
}
例如:
int sum(){ return 30; }
6.有参数无返回值函数的定义
格式:
void 函数名(参数类型 形式参数1, 参数类型 形式参数2......) {
函数体;
}
例如:
1 void printLine(int n){ 2 int i = 1; 3 while (i <= n){ 4 printf("---------"); 5 i++; 6 } 7 8 }
7.有参数有返回值函数的定义
格式:
返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2......) {
函数体;
}
例如:
1 int sum(int a, int b){ 2 return a + b; 3 }
二、递归函数
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数 的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用 一次就进入新的一层。
void function(int x) { function(x); }
- 自己调用自己
- 存在一个条件能够让递归结束
- 问题的规模能够缩小
例如:
获取用户输入的数字, 直到用户输入一个正数为止
1 void inputNumber() 2 { 3 int number = -1; 4 printf("请输入一个正数abc\n"); 5 scanf("%d", &number); 6 if (number < 0) { 7 // 负数 8 inputNumber(); 9 }else{ 10 // 正数 11 printf("number = %d\n", number); 12 } 13 }
用递归求n的阶乘
1 int factorial(int n){ 2 int result = 0; //定义变量用于存放阶乘的结果 3 if (n==1) { //如果n=1的时候,1!的结果还是1 4 result = 1; 5 }else{ 6 result = factorial(n-1)*n;//如果不是1,阶乘=(n-1)!*n; 7 } 8 return result; 9 }