赞
踩
函数的声明
(main函数前)----告诉有一个函数
格式: 类型 函数名(参数);
函数的声明 放到头文件add.c
函数的定义
----创建函数----放到add.c
格式:类型 函数名(参数)
{
语句项;
}
在文件中包含头文件
#include "add.h"
包含头文件-实质上就拷贝头文件的声明 到文件
导入静态库
#pragma comment (lib, "add.lib")
函数的递归
例1: 输入无符号整形unsigned int数,打印每一位print
%u 打印无符号整形数
- #include<stdio.h>
- void print(unsigned int n)
- {
- if (n > 9)
- {
- print(n / 10);
- }
- printf("%d ", n % 10);
- }
-
- int main()
- {
- unsigned int n = 0;
- scanf("%u", &n);
- print(n);
-
- return 0;
- }
例2: 函数不允许创建临时变量,求字符串长度my_strlen
1.有临时变量
- #include<stdio.h>
-
- void my_strlen(char* str)
- {
- int count = 0;
- while (*str != '\0')
- {
- count++;
- str++;
- }
- printf("%d\n", count);
- }
-
- int main()
- {
- char str[] = "abcdef";
- my_strlen(&str);
- return 0;
- }
2.无临时变量--递归
- #include<stdio.h>
-
- int my_strlen(char* str)
- {
- if (*str != '\0')
- {
- return 1 + my_strlen(++str);
- }
- return 0;
- }
-
- int main()
- {
- char str[] = "abcdef";
- printf("%d\n", my_strlen(&str));
- return 0;
- }
例3: 不考虑溢出, 求N的阶乘fac()
1.递归
- //1.递归
- #include <stdio.h>
-
- int Fac(int n)
- {
- if (n == 1)
- return 1;
- else
- {
- return n*Fac(n-1);
- }
- }
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- printf("%d\n", Fac(n));
- return 0;
- }
2.迭代--循环
- //非递归
- #include <stdio.h>
-
- int main()
- {
- int n = 0;
- int fac = 1;
- scanf("%d", &n);
- if (n == 1)
- fac = 1;
- while (n > 1)
- {
- fac = n * fac;
- n--;
- }
-
-
- printf("%d\n", fac);
- return 0;
- }
例4: 不考虑溢出, 求斐波那契数列Fib()
1.递归
- //递归
- #include<stdio.h>
-
- int Fib(int n)
- {
- if (n == 1 || n == 2)
- return 1;
- else
- return Fib(n - 1) + Fib(n - 2);
- }
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- printf("%d\n", Fib(n));
- return 0;
- }
2.非递归
- //2.非递归
- #include <stdio.h>
- int main()
- {
- int a = 1;
- int b = 1;
- int fib = 1;
- int n = 0;
- scanf("%d", &n);
- if (n == 1 | n == 2)
- fib = 1;
- while (n > 2)//5
- {
- fib = a + b;
- a = b;
- b = fib;
- n--;
- }
- printf("%d\n", fib);
- return 0;
- }
函数在调用过程中重复过多,使用非递归
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。