当前位置:   article > 正文

C语言初阶—9函数

C语言初阶—9函数

函数的声明

(main函数前)----告诉有一个函数

格式:  类型 函数名(参数);

函数的声明 放到头文件add.c

函数的定义

----创建函数----放到add.c

格式:类型 函数名(参数)

{

语句项;

}

在文件中包含头文件

#include "add.h"

包含头文件-实质上就拷贝头文件的声明 到文件

导入静态库

#pragma comment (lib, "add.lib")

函数的递归

例1: 输入无符号整形unsigned int数,打印每一位print 

%u 打印无符号整形数

  1. #include<stdio.h>
  2. void print(unsigned int n)
  3. {
  4. if (n > 9)
  5. {
  6. print(n / 10);
  7. }
  8. printf("%d ", n % 10);
  9. }
  10. int main()
  11. {
  12. unsigned int n = 0;
  13. scanf("%u", &n);
  14. print(n);
  15. return 0;
  16. }

例2: 函数不允许创建临时变量,求字符串长度my_strlen

1.有临时变量

  1. #include<stdio.h>
  2. void my_strlen(char* str)
  3. {
  4. int count = 0;
  5. while (*str != '\0')
  6. {
  7. count++;
  8. str++;
  9. }
  10. printf("%d\n", count);
  11. }
  12. int main()
  13. {
  14. char str[] = "abcdef";
  15. my_strlen(&str);
  16. return 0;
  17. }

2.无临时变量--递归

  1. #include<stdio.h>
  2. int my_strlen(char* str)
  3. {
  4. if (*str != '\0')
  5. {
  6. return 1 + my_strlen(++str);
  7. }
  8. return 0;
  9. }
  10. int main()
  11. {
  12. char str[] = "abcdef";
  13. printf("%d\n", my_strlen(&str));
  14. return 0;
  15. }

例3: 不考虑溢出, 求N的阶乘fac()

1.递归

  1. //1.递归
  2. #include <stdio.h>
  3. int Fac(int n)
  4. {
  5. if (n == 1)
  6. return 1;
  7. else
  8. {
  9. return n*Fac(n-1);
  10. }
  11. }
  12. int main()
  13. {
  14. int n = 0;
  15. scanf("%d", &n);
  16. printf("%d\n", Fac(n));
  17. return 0;
  18. }

2.迭代--循环

  1. //非递归
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. int fac = 1;
  7. scanf("%d", &n);
  8. if (n == 1)
  9. fac = 1;
  10. while (n > 1)
  11. {
  12. fac = n * fac;
  13. n--;
  14. }
  15. printf("%d\n", fac);
  16. return 0;
  17. }

例4: 不考虑溢出, 求斐波那契数列Fib()

1.递归

  1. //递归
  2. #include<stdio.h>
  3. int Fib(int n)
  4. {
  5. if (n == 1 || n == 2)
  6. return 1;
  7. else
  8. return Fib(n - 1) + Fib(n - 2);
  9. }
  10. int main()
  11. {
  12. int n = 0;
  13. scanf("%d", &n);
  14. printf("%d\n", Fib(n));
  15. return 0;
  16. }

2.非递归

  1. //2.非递归
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int a = 1;
  6. int b = 1;
  7. int fib = 1;
  8. int n = 0;
  9. scanf("%d", &n);
  10. if (n == 1 | n == 2)
  11. fib = 1;
  12. while (n > 2)//5
  13. {
  14. fib = a + b;
  15. a = b;
  16. b = fib;
  17. n--;
  18. }
  19. printf("%d\n", fib);
  20. return 0;
  21. }

函数在调用过程中重复过多,使用非递归

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/387050
推荐阅读
相关标签
  

闽ICP备14008679号