0
点赞
收藏
分享

微信扫一扫

函数讲解2

天使魔鬼 2022-04-18 阅读 63

#define _CRT_SECURE_NO_WARNINGS 1
//1、函数的嵌套调用和链式访问 --函数和函数之间可以有机地组合的

//1.1 函数的嵌套调用

#include <stdio.h>
#include "add.h"
//
//void new_line()
//{
//    printf("hehe\n");
//}
//
//void three_line()
//{
//    int i = 0; 
//    for (i = 0; i < 3; i++)
//    {
//        new_line();
//    }
//}
//int main()
//{
//    three_line();
//    return 0;
//}

//1.2链式访问 --- 把一个函数的返回值作为另外一个函数的参数

//int main()
//{
//    int len = 0;
//    //len = strlen("abc");
//    printf("%d", strlen("abc"));
//    return 0;
//}

//int main()
//{
//    printf("%d", printf("%d", printf("%d", 43))); //  :4321    printf函数的返回值是字符的数量
//    return 0;
//}

//int main()
//{
//    int a = 10;
//    int b = 20;
//    int sum=Add(a, b);
//    printf("%d\n", sum);
//    return 0;
//}

//2、函数的声明和定义    


//3、函数的递归 --程序调用自身的编程技巧成为递归
//递归的两个必要条件
//--存在限制条件,当满足这个限制条件的时候,递归便不再继续
//--每次递归调用之后越来越接近这个限制条件
//int main()
//{
//    printf("hehe\n");
//    main();
//    return 0;
//}

//练习:接收一个整型值,按照顺序打印它的每一位数字。如:输入:1234 输出:1   2   3    4
//void print(int a)
//{
//    if (a > 9)
//    {
//        print(a / 10);
//    }
//    printf("%d  ", a % 10);
//}
//
//int main()
//{
//    unsigned int num = 0;
//    scanf("%d", &num);
//    print(num);
//    return 0;
//}

//练习:不使用变量,求字符串长度

//用变量例:
//void len(char* a)
//{
//    int count = 0;
//    while (*a != '\0')
//    {
//        a++;
//        count++;
//    }
//    printf("字符串长度为:%d\n", count);
//}
//
//int len(char* a)
//{
//    if (*a != '\0')
//    {
//        return 1 + len(a + 1);
//    }
//    else
//    {
//        return 0;
//    }
//}
//
//int main()
//{
//    char arr[] = "abc";
//    /*printf("%d", strlen(arr));*/
//    int lens = len(arr);
//    printf("字符串长度为:%d", lens);
//}

//函数迭代
//练习3:求n的阶乘
//int factorial(int a)
//{
//    if (a > 1)
//    {
//        return a*factorial(a - 1);
//    }
//    else
//    {
//        return 1;
//    }
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int sum = factorial(n); //用变量赋值,直接用n输出值不变
//    /*int i = 0;
//    int num = 1;
//    for(i = 1; i <= n; i++)
//    {
//        num = num * i;
//
//    }*/
//    printf("%d", sum);
//}

//练习4:求第N个斐波那契数
//函数1:迭代算法
//int count = 0;
//int fibonacci(int x)
//{
//    if (x == 3)
//    {
//        count++;
//    }
//    if (x > 2)
//    {
//        return fibonacci(x-1) + fibonacci(x - 2);
//    }
//    else
//        return 1;
//}


//函数2:循环
//int fibonacci(int x)
//{
//    int a = 1;
//    int b = 1;
//    int c = 0;
//    int tmp = 0;
//    while (x >2)
//    {
//        tmp = a;
//        c = a + b;
//        a = b;
//        b = c;
//        x--;
//    }
//    return c;
//    if (x <= 2)
//    {
//        return 1;
//    }
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int sum =fibonacci(n);
//    printf("%d\n", sum);
//    //printf("count = %d\n", count);
//}
//
//递归和迭代有什么区别?
//一、含义不同:

//递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
//递归循环中,遇到满足终止条件的情况时逐层返回来结束。迭代则使用计数器结束循环。当然很多情况都是多种循环混合采用,这要根据具体需求。

//二、结构不同:

//递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构。 递归与迭代都涉及重复:迭代显式使用重复结构,而递归通过重复函数调用实现重复。

举报

相关推荐

0 条评论