C语言入门(五)之函数、递归

版权声明:如果觉得文章对你有用,转载不需要联系作者,但请注明出处 https://blog.csdn.net/jinxin70/article/details/83217562

函数的定义

#include <stdio.h>
/*
 函数的定义格式:
 返回值类型 函数名称(形参列表)
 {
    函数体; // 语句; ...
 
 }
 */
/*
 初学者如何定义函数:
 应该有4个确定:
 1.确定函数名称(给函数起一个有意义的名称, 让调用者一看到名称就知道这个函数是干什么的)
    1.1函数是标示符的一种 , 遵守规则 : 26个字母 , 数字 , _组成, 遵守规范: 驼峰命名
 2.确定形参列表
    2.1形参列表的格式 (数据类型 变量名称, ...)
    2.2如何确定形参列表? 就看看以后调用函数时, 是否需要传递一些辅助的数据给函数
 3.确定返回值
 4.确定返回值类型
    4.1return的是什么类型, 那么返回值类型就写什么类型
 */

int getMax(int v1, int v2)
{
    int max = v1 > v2 ? v1 : v2;
    /*
     return有两个作用:
     1.返回数据给函数调用者
     2.结束函数
     */
    return max;
}
int main(int argc, const char * argv[]) {
    
    // 需求: 要求获取两个数的最大值
    int a = 10;
    int b = 20;
//    int max = a > b ? a : b;
    
    int result = getMax(a , b);
    printf("result = %i\n", result);
    
    int m = 998;
    int n = 668;
    result = getMax(m, n);
//    int max2 = m > n ? m : n;
    printf("result = %i\n", result);
    
    return 0;
}

函数不能嵌套定义

C语言是弱语言
函数可以没有返回值类型
如果函数没有写返回值类型, 那么默认就是int类型

C语言规定: 一般情况下, 如果想要调用一个函数, 该函数必须在调用之前出现。

如果函数写在调用处之后,必须在调用前声明函数,声明可以写在函数内外。

递归

递归一定要有一个明确的结束条件, 否则会造成死循环(无限循环)

#include <stdio.h>
int myPow(int base, int n);
int myPow2(int base, int n);
int main(int argc, const char * argv[]) {
    /*
     设计一个函数用来计算B的n次方
     b = 2
     n = 3
     
     int result = b(3);
     b(0) = 1; // 计算0次方
     b(1) = b(0) * b; // 0次方 * 当前的这个数 == 1次方
     b(2) = b(1) * b; // 1次方 * 当前的这个数 ==  2次方
     b(3) = b(2) * b; // 2次方 * 当前的这个数 == 3次方
     b(n) = b(n - 1) * b;
     
     2(3)
     2 * 2 * 2;
     result = 1 * 2; // 计算1次方
     result = 2(result) * 2; // 1次方 * 当前的这个数 = 2次方
     result = 2 * 2(result) * 2; // 2次方 * 当前的这个数 = 3次方
     用上一次的结果 * 2
     */
    int a = 2;
    int b = 3;
//    int resutl = myPow(a, b);
    int resutl = myPow2(a, b);
    printf("result = %i\n", resutl);
    return 0;
}
/*
 1.必须有一个明确的结束标志
 2.自己调用自己
 */
int myPow2(int base, int n)
{
    int result = 1;
    if (n <= 0) {
        // 结束条件
        return result;
    }else
    {
        return myPow2(base, n - 1) * base;
    }
}

int myPow(int base, int n)
{
    // 1.定义变量保存计算的结果
    int result = 1; //
    for (int i = 0; i < n; i++) {
        printf("%i * %i\n", result, base);
        result = result * base;
    }
    return result;
}
#include <stdio.h> // 告诉编译器printf函数的格式, 声明printf函数

int main(int argc, const char * argv[]) {
    /*
     有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问 第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个 人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人, 他说是10岁。请问第5个人多大?
     
     第一个人得岁数 == 10
     第二个人得岁数 == 第一个人 + 2  // 12
     第三个人得岁数 == 第二个人 + 2  // 14
     第四个人得岁数 == 第三个人 + 2  // 16
     第五个人得岁数 == 第四个人 + 2  // 18
     
     一致第一个人得年龄, 和每个人之间的年龄差, 求第n个人的年龄
     age(1) == 10
     age(2) == age(1) + 2;
     age(3) == age(2) + 2;
     age(4) == age(3) + 2;
     age(5) == age(4) + 2;
     
     age(n) = age(n - 1) + 2;
     
     */
    
    int result = age(3);
    printf("result = %i\n", result);
    return 0;
}

int age(int n) // 3  2  1
{
   // 定义结束条件
    if (n == 1) {
        return 10;
    }else
    {
//      return 14;
//      return 12;
        
        return age(n - 1) + 2;
    }
}

猜你喜欢

转载自blog.csdn.net/jinxin70/article/details/83217562
今日推荐