IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> ??(带图解)【C语言】函数(中)递归?链式访问?二分查找??看完让你认识到不一样的函数 -> 正文阅读

[C++知识库]??(带图解)【C语言】函数(中)递归?链式访问?二分查找??看完让你认识到不一样的函数

前言

?? 铁子们大家好,欢迎大家来到出小月的博客里,今天给大家带来的是【C语言】关于函数的知识,这可是很重要的东西哦?
希望大家看完我这篇文章都能够“涨芝士”,感觉小月写的还不错的话,记得👍🏻点赞加关注😘鼓励一下博主哦,不然下次可找不到我啦??

作者介绍

?? 作者的gitee:出小月
?? 作者的主页:出小月的《程序员历险记》
??专栏:《C语言》,《数据结构初阶》
😊希望大家都能够:好好学习,天天编程???

一、函数的链式访问

什么是链式访问呢??就是把一个函数的返回值作为另一个函数的参数。。。哦,好像明白了,接下来咱们来看几个例子🤗🤗

int main()
{
	printf("%d", printf("%d", printf("%d", 43)));
	return 0;
}	

这个结果是什么呢???
在这里插入图片描述
为什么呢???
这里咱们应该先了解一下printf函数,这个函数的返回值是整形,就是它的字符个数。
在这里插入图片描述

二、用函数实现"二分查找"

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少.

思路:如果我想在一个数组中找一个数,用left记录第一个数的下标值,用right记录最后一个值的位置。我先找到这个数组的中间值(下标为:mid=【left+right】/2),如果这个中间值小于目标值,就把left置为mid+1;如果中间值大于目标值就把right置为mid-1

下面就是查找的过程啦😁??
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是代码🤗🤗🤗

#include<stdio.h>
int binary_search(int a[], int k, int size)
{
	int left = 0;
	int right = size - 1;
	while (left<=right)
	{
		int mid = (left + right) / 2;
		if (a[mid] < k)
			left = mid + 1;
		else if (a[mid] > k)
			right = mid - 1;
		else
			return mid;
	}
	return -1;
}
int main()
{
	int a[] = {12,23,34,54,56,67,78};
	int k = 23;
	int pos = binary_search(a, k, sizeof(a) / sizeof(int));
	if (pos == -1)
		printf("找不到");
	else
		printf("找到了,下标是%d", pos);
	return 0;
}

在这里插入图片描述

三、函数的递归

用一句话来解释递归再合适不过了????🤞🤞,只需少量的程序就可描述解题过程中所需要的多次重复计算,大大地减少了程序的代码量

1、按照顺序打印一个整数的每一位

如果是逆序的话,很简单,一个while循环就搞定!

int main() 
{
	int a = 1234;
	while (a>0)
	{
		int b =a % 10;
		a = a / 10;
		printf("%d ", b);
	}
	return 0;
}

在这里插入图片描述
那如果是正序呢???那我们就要用递归了。。。下面是过程
在这里插入图片描述
下面这是完整的代码👍👍👍

void Print(unsigned int n)
{
	if (n > 9)
	{
		Print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	unsigned int num = 0;
	scanf("%u", &num);
	//写一个函数打印num的每一位
	Print(num);
	return 0;
}

在这里插入图片描述

2、求字符串的长度

求字符串的的长度可以用一个函数strlen,所以我们写这个函数就是模拟strlen函数

如果可以用临时变量的话,可以这样写

int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;//字符指针+1,向后跳1个字符
	}
	return count;
}

int main()
{
	char arr[] = "xiaoyue";
	//[b i t \0]
	//数组名其实是数组首元素的地址
	int len = my_strlen(arr);
	printf("%d\n", len);

	return 0;
}

那如果不能用临时变量呢???那我们就要用递归了。。。,下面是图解

在这里插入图片描述


int my_strlen(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char arr[] = "xiaoyue";
	//[b i t \0]
	//数组名其实是数组首元素的地址
	int len = my_strlen(arr);
	printf("%d\n", len);

	return 0;
}

总结

😍😍😍今天的分享就到这里了,感觉小月写的还不错的话,记得双击加关注哦,如果有问题的话,可以私信小月哦???

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:06:35  更:2022-11-05 00:07:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 13:30:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码