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 }

 

 
posted @ 2015-06-23 23:26  wlv587  阅读(379)  评论(0编辑  收藏  举报