C语言初阶—9函数

函数的声明

(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;
}

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

相关推荐

  1. C语言测试

    2024-04-08 15:46:01       48 阅读
  2. C语言--指针

    2024-04-08 15:46:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 15:46:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 15:46:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 15:46:01       82 阅读
  4. Python语言-面向对象

    2024-04-08 15:46:01       91 阅读

热门阅读

  1. Spring集成MyBatis

    2024-04-08 15:46:01       43 阅读
  2. 注入类型(一)

    2024-04-08 15:46:01       40 阅读
  3. opencv+python(图形绘制)

    2024-04-08 15:46:01       39 阅读
  4. set feedback 和set define

    2024-04-08 15:46:01       50 阅读
  5. 介绍 TensorFlow 的基本概念和使用场景。

    2024-04-08 15:46:01       40 阅读
  6. 将下载的jar依赖导入到本地依赖库(oracle、DM)

    2024-04-08 15:46:01       41 阅读
  7. 魔众 文库配置异步转换

    2024-04-08 15:46:01       38 阅读
  8. 【力扣】7. 整数反转

    2024-04-08 15:46:01       37 阅读