当前位置: 首页 > news >正文

【算法系列 | 12】深入解析查找算法之—斐波那契查找

序言

心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。

决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。

我们一起努力,成为更好的自己!

今天第12讲,讲一下查找算法的—斐波那契查找

一、算法介绍

斐波那契查找算法是一种基于黄金分割的有序查找算法,通过斐波那契数列的特性,在有序序列中快速定位目标元素的位置。

1.1 原理介绍

它结合了二分查找和黄金分割的思想。这个算法的基本原理如下:

  1. 序列构建: 首先,需要一个有序的数组或序列。这个数组的长度通常是斐波那契数列中的一个值,这有助于在查找过程中对数组进行分割。

  2. 斐波那契数列: 斐波那契数列是一组按以下递归关系定义的数字序列:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2)(n > 1)。通常,斐波那契数列的前几项是:0, 1, 1, 2, 3, 5, 8, 13, 21, ...

  3. 查找过程: 对于一个有序序列,首先选择一个斐波那契数列中的值,使得这个值大于或等于待查找序列的长度,然后使用这个斐波那契数列的值将序列分成两个部分。这两个部分的长度之比就是相邻两个斐波那契数的比例。

  4. 比较: 比较要查找的元素与序列中分割点的元素。如果相等,则找到了目标元素;如果待查找元素小于分割点元素,继续在前半部分进行查找;如果待查找元素大于分割点元素,继续在后半部分进行查找。

  5. 迭代: 重复上述步骤,不断缩小查找范围,直到找到目标元素或确定元素不在序列中。

示例说明

假设有一个有序数组 arr,长度为 n,而 n 正好是斐波那契数列中的某个值。为了简化,我们可以选择 n 为斐波那契数列中的某个值,比如 F(5) = 5,所以 n = 5。那么,我们有一个有序数组 arr,长度为 5。

arr = [1, 3, 5, 7, 9]

接下来,我们要查找值为 5 的元素在数组中的位置。以下是斐波那契查找的步骤:

1. 选择斐波那契数列的值: 在斐波那契数列中找到一个最小的值,使得 F(k) >= n,其中 k 是最小可能满足的索引。在这个例子中,我们选择 F(5) = 5。

 2. 分割数组: 将数组分成两个部分,长度比例为斐波那契数列中的两个相邻值的比例。在这个例子中,我们有两部分,长度比例是 3:2。

     arr_left = [1, 3, 5] arr_right = [7, 9]

3.  比较与查找: 比较要查找的元素(5)与分割点元素(arr[2] = 5)。如果相等,找到了目标元素。如果待查找元素小于分割点元素,继续在前半部分进行查找。如果待查找元素大于分割点元素,继续在后半部分进行查找。

 在这个例子中,5 等于分割点元素,所以我们找到了目标元素的位置。

4. 迭代: 重复上述步骤,直到找到目标元素或确定元素不在序列中。

1.2 优缺点

优点:

  1. 适用性广泛: 斐波那契查找适用于有序序列,尤其在序列长度接近斐波那契数列的某个值时效果更佳。相较于二分查找,斐波那契查找能够在某些特定情况下减少查找次数。

  2. 更好的平衡: 由于斐波那契查找使用黄金分割比例进行分割,使得分割后的两个子序列的长度比例更加接近,有助于保持查找的平衡性。

  3. 相对均匀的分割: 斐波那契查找相对于其他分割方法,如二分查找,能够产生更为均匀的分割,有助于在查找过程中更快地接近目标元素。

缺点:

  1. 数组长度限制: 斐波那契查找要求待查找的序列长度必须是斐波那契数列中的某个值,这在实际应用中可能不太灵活,特别是当数据规模不是恰好是斐波那契数列中的某个值时,可能需要对数据进行补齐。

  2. 比较次数不稳定: 斐波那契查找在某些情况下可能会比二分查找效果更好,但并不是在所有情况下都表现更好。具体的性能取决于待查找数据的分布情况和序列的长度。在一些场景下,二分查找可能更为稳定。

  3. 计算斐波那契数列: 为了选择合适的斐波那契数列的值,需要事先计算斐波那契数列,这可能涉及到一些计算成本,特别是对于较大的数据集。

总体来说,斐波那契查找算法在某些特定条件下表现优秀,但在实际应用中需要谨慎选择,并根据具体情况考虑使用。在一些情况下,简单的二分查找可能更加实用和高效。

1.3 复杂度

时间复杂度:

  1. 查找过程: 斐波那契查找的主要操作是不断地缩小查找范围,通过比较待查找元素与分割点元素来确定继续在前半部分还是后半部分进行查找。在每一步操作中,都可以将待查找范围缩小为原来的黄金分割比例,即约为 0.618

  2. 时间复杂度: 斐波那契查找的时间复杂度可以表示为 O(log n),其中 n 是待查找序列的长度。与二分查找相比,它的复杂度相对更低。

空间复杂度:

  1. 常数空间: 斐波那契查找算法的空间复杂度非常低。它只需要常数级别的额外空间来存储一些中间变量,如斐波那契数列的值、分割点等。

  2. O(1): 因此,斐波那契查找的空间复杂度可以表示为 O(1)。

总体来说,斐波那契查找在时间复杂度和空间复杂度上都相对较低,这使得它在某些特定场景下成为一个有效的查找算法。

但需要注意,实际效果还受到数据分布等因素的影响,因此在选择查找算法时,需要综合考虑具体情况。

1.4 使用场景

斐波那契查找算法在一些特定的场景下表现良好,适用于如下情况:

  1. 有序序列: 斐波那契查找要求待查找的序列是有序的,因为它是基于比较来缩小查找范围的。如果序列无序,需要先进行排序操作。

  2. 长度接近斐波那契数: 算法对序列的长度有一定的要求,最好是恰好是斐波那契数列中的某个值。在实际应用中,可以选择最接近并大于待查找序列长度的斐波那契数。

  3. 分布均匀: 如果数据在序列中的分布相对均匀,斐波那契查找可以更好地发挥其优势。这是因为它能够在分割序列时保持更好的平衡。

  4. 查找频繁但数据变动不频繁: 如果对同一序列进行多次查找而且序列基本保持不变,斐波那契查找的一些前期计算可以提前完成,然后多次使用相同的计算结果进行查找,从而提高效率。

  5. 适用于内存有限的情况: 斐波那契查找只需要常数级别的额外空间,因此在内存有限的情况下比一些其他算法更为适用。

需要注意的是,斐波那契查找并不总是比其他查找算法更好,它在特定的条件下才会表现出色。在实际应用中,需要根据具体情况选择最适合的查找算法。

二、代码实现

2.1 Java代码实现

2.1.1 代码示例

public class FibonacciSearch {// 辅助函数:生成斐波那契数列private static int[] generateFibonacci(int n) {int[] fibonacci = new int[n];fibonacci[0] = 0;fibonacci[1] = 1;for (int i = 2; i < n; i++) {fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];}return fibonacci;}// 斐波那契查找算法public static int fibonacciSearch(int[] arr, int key) {int n = arr.length;// 生成斐波那契数列,找到最接近且大于等于 n 的值int[] fibonacci = generateFibonacci(n);int k = 0;while (fibonacci[k] < n) {k++;}// 将数组扩展到斐波那契数列的长度int[] temp = new int[fibonacci[k]];System.arraycopy(arr, 0, temp, 0, n);int low = 0;int high = n - 1;// 主要查找过程while (low <= high) {int mid = low + fibonacci[k - 1] - 1;if (key < temp[mid]) {high = mid - 1;k -= 1;} else if (key > temp[mid]) {low = mid + 1;k -= 2;} else {// 找到了目标元素,需要判断返回的是原数组中的索引还是扩展数组中的索引return Math.min(mid, high);}}// 未找到目标元素return -1;}public static void main(String[] args) {int[] arr = {1, 3, 5, 7, 9, 11, 13, 15};int key = 7;int result = fibonacciSearch(arr, key);if (result != -1) {System.out.println("元素 " + key + " 在数组中的索引为:" + result);} else {System.out.println("元素 " + key + " 不在数组中");}}
}

2.1.2 代码详解

  1. generateFibonacci方法:生成斐波那契数列,参数 n 表示生成数列的长度。

  2. fibonacciSearch方法:实现了斐波那契查找算法。首先,通过调用 generateFibonacci 方法生成斐波那契数列,然后找到最接近并大于等于数组长度的斐波那契数。接着,将原数组扩展到斐波那契数列的长度,再进行主要的查找过程。查找过程中,根据比较的结果不断缩小查找范围,直到找到目标元素或确定元素不在序列中。

  3. main方法:在这里,创建一个有序数组 arr,并调用 fibonacciSearch 方法查找元素 7 的索引。最后,输出查找结果。

2.1.3 运行结果

元素 7 在数组中的索引为:3

2.2 Python代码实现

2.2.1 代码示例

def generate_fibonacci(n):"""生成斐波那契数列"""fibonacci = [0, 1]while fibonacci[-1] < n:fibonacci.append(fibonacci[-1] + fibonacci[-2])return fibonaccidef fibonacci_search(arr, key):"""斐波那契查找算法"""n = len(arr)# 生成斐波那契数列,找到最接近且大于等于 n 的值fibonacci = generate_fibonacci(n)k = 0while fibonacci[k] < n:k += 1# 将数组扩展到斐波那契数列的长度temp = arr + [arr[-1]] * (fibonacci[k] - n)low, high = 0, n - 1# 主要查找过程while low <= high:mid = low + fibonacci[k - 1] - 1if key < temp[mid]:high = mid - 1k -= 1elif key > temp[mid]:low = mid + 1k -= 2else:# 找到了目标元素,返回原数组中的索引return min(mid, n - 1)# 未找到目标元素return -1if __name__ == '__main__':# 测试arr = [1, 3, 5, 7, 9, 11, 13, 15]key = 7result = fibonacci_search(arr, key)if result != -1:print(f"元素 {key} 在数组中的索引为:{result}")else:print(f"元素 {key} 不在数组中")

2.2.2 代码详解

  1. generate_fibonacci 函数:用于生成斐波那契数列,直到数列的最后一个值大于等于给定的参数 n

  2. fibonacci_search 函数:实现了斐波那契查找算法。首先,调用 generate_fibonacci 函数生成斐波那契数列,然后找到最接近并大于等于数组长度的斐波那契数。接着,将原数组扩展到斐波那契数列的长度,再进行主要的查找过程。查找过程中,根据比较的结果不断缩小查找范围,直到找到目标元素或确定元素不在序列中。

在测试部分,创建一个有序数组 arr,并调用 fibonacci_search 函数查找元素 7 的索引。最后,输出查找结果。

2.2.3 运行结果

元素 7 在数组中的索引为:3

好啦,今天就到这里啦,下期见喽~~🙉

三、图书推荐

3.1 图书名称

图书名称:《Pandas数据分析》

Pandas是强大且流行的库,是Python中数据科学的代名词。这本书会介绍如何使用Pandas对真实世界的数据集进行数据分析,如股市数据、模拟黑客攻击的数据、天气趋势、地震数据、葡萄酒数据和天文数据等

Pandas使我们能够有效地处理表格数据,从而使数据整理和可视化变得更容易。等不及的小伙伴,可以点击这个链接先睹为快 《Pandas数据分析》

3.2 图书介绍 

3.3 参与方式

图书数量:本次送出 2 本   !!!⭐️⭐️⭐️
活动时间:截止到 2024-01-09 12:00:00

抽奖方式:

  • 评论区随机抽取小伙伴!

留言内容,以下方式都可以:

  • 根据文章内容进行高质量评论

参与方式:关注博主、点赞、收藏,评论区留言 

3.4 中奖名单

🍓🍓 获奖名单🍓🍓

 中奖名单:请关注博主动态

名单公布时间:2024-01-09 下午

相关文章:

【算法系列 | 12】深入解析查找算法之—斐波那契查找

序言 心若有阳光&#xff0c;你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏&#xff0c;希望能帮助大家很好的了解算法。主要深入解析每个算法&#xff0c;从概念到示例。 我们一起努力&#xff0c;成为更好的自己&#xff01; 今天第12讲&#xff0c;讲…...

全新的C++语言

一、概述 C 的最初目标就是成为 “更好的 C”&#xff0c;因此新的标准首先要对基本的底层编程进行强化&#xff0c;能够反映当前计算机软硬件系统的最新发展和变化&#xff08;例如多线程&#xff09;。另一方面&#xff0c;C对多线程范式的支持增加了语言的复杂度&#xff0…...

three.js 多通道组合

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div style"border: 1px so…...

编程笔记 html5cssjs 022 HTML表单概要

编程笔记 html5&css&js 022 HTML表单概要 一、<form> 元素二、HTML Form 属性三、操作小结 网页光是输出没有输入可不行&#xff0c;因为输出还是比输入容易&#xff0c;所有就先接触输出&#xff0c;后学习输入。html用来输入的东西叫“表单”。 HTML 表单用于搜…...

​三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…...

MySQL-DCL

DCL是数据控制语言&#xff0c;用来管理数据库用户&#xff0c;控制数据库的访问权限。 管理用户&#xff1a;管理哪些用户可以访问哪些数据库 1.查询用户 USE mysql; SELECT * FROM user; 注意&#xff1a; MySQL中用户信息和用户的权限信息都是记录在mysql数据库的user表中的…...

QT开源类库集合

QT开源类库集合 一、自定义控件 QSintQicsTableLongscroll-qtAdvanced Docking System 二、图表控件 QwtQCustomPlotJKQTPlotter 三、网络 QHttpEngineHTTP 四、 音视频 vlc-qt 五、多线程 tasks 六、数据库 EasyQtSql 一、自定义控件 1. QSint 源代码地址&#xff1a;QSint&…...

C++ STL(2)--算法(2)

算法(2)----STL里的排序函数。 1. sort: 对容器或普通数组中指定范围内的元素进行排序&#xff0c;默认进行升序排序。 sort函数是基于快速排序实现的&#xff0c;属于不稳定排序。 只支持3种容器&#xff1a;array、vector、deque。 如果容器中存储的是自定义的对象&#xff…...

格密码基础:对偶格(超全面)

目录 一. 对偶格的格点 1.1 基本定义 1.2 对偶格的例子 1.3 对偶格的图形理解 二. 对偶格的格基 2.1 基本定义 2.2 对偶格的格基证明 三. 对偶格的行列式 3.1 满秩格 3.2 非满秩格 四. 重复对偶格 五. 对偶格的转移定理&#xff08;transference theorem&#xff…...

ECMAScript简介及特性

ECMAScript是一种由ECMA国际&#xff08;前身为欧洲计算机制造商协会&#xff09;制定和发布的脚本语言规范&#xff0c;JavaScript在它基础上进行了自己的封装。ECMAScript和JavaScript的关系是&#xff0c;前者是后者的规格&#xff0c;后者是前者的一种实现。 ECMAScript的…...

csdn中的资源文件如何删除?

csdn中的资源文件如何删除&#xff1f; 然后写文章的时候 点击资源绑定&#xff0c;解锁资源&#xff0c;就可以再次上传。...

NA原理及配置

在IP地址空间中&#xff0c;a&#xff1b;b&#xff1b;c类地址中各有一部分地址&#xff0c;被称为私有IP地址&#xff08;私网地址&#xff09;&#xff0c;其余的为公有IP地址&#xff08;公网地址&#xff09; A&#xff1a;10.0.0.0 - 10.255.255.255 --- 相当于1条A类网段…...

解决:TypeError: ‘tuple’ object does not support item assignment

解决&#xff1a;TypeError: ‘tuple’ object does not support item assignment 文章目录 解决&#xff1a;TypeError: tuple object does not support item assignment背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff1a;方法二&#xff1a;今天的分享就到…...

vue3项目中axios的常见用法和封装拦截(详细解释)

1、axios的简单介绍 Axios是一个基于Promise的HTTP客户端库&#xff0c;用于浏览器和Node.js环境中发送HTTP请求。它提供了一种简单、易用且功能丰富的方式来与后端服务器进行通信。能够发送常见的HTTP请求&#xff0c;并获得服务端返回的数据。 此外&#xff0c;Axios还提供…...

基础语法(一)(1)

常量和表达式 在这里&#xff0c;我们可以把Python当成一个计算器&#xff0c;来进行一些算术运算 例如&#xff1a; print(1 2 - 3) print(1 2 * 3) print(1 2 / 3)注意&#xff1a; print是一个python内置的函数&#xff0c;这个稍后我们会进行介绍 可以使用-*/&…...

YOLOv8模型yaml结构图理解(逐层分析)

前言 YOLO-V8&#xff08;官网地址&#xff09;&#xff1a;https://github.com/ultralytics/ultralytics 一、yolov8配置yaml文件 YOLOv8的配置文件定义了模型的关键参数和结构&#xff0c;包括类别数、模型尺寸、骨架&#xff08;backbone&#xff09;和头部&#xff08;hea…...

【大数据】Zookeeper 集群及其选举机制

Zookeeper 集群及其选举机制 1.安装 Zookeeper 集群2.如何选取 Leader 1.安装 Zookeeper 集群 我们之前说了&#xff0c;Zookeeper 集群是由一个领导者&#xff08;Leader&#xff09;和多个追随者&#xff08;Follower&#xff09;组成&#xff0c;但这个领导者是怎么选出来的…...

Redis 过期策略

我们在set key的时候可以设置key的过期时间&#xff0c;哪redis是怎么处理过期的key的呢&#xff1f; 有三种过期策略 定时过期&#xff1a;每个设置过期时间的key会创建一个定时器&#xff0c;到过期时间就会立即对key进行清除。该策略可以立即清除过期的数据&#xff0c;对…...

RT_Thread 调试笔记:串口打印、MSH控制台 相关

说明&#xff1a;记录日常使用 RT_Thread 开发时做的笔记。 持续更新中&#xff0c;欢迎收藏。 1.打印相关 1.打印宏定义&#xff0c;可以打印打印所在文件&#xff0c;函数&#xff0c;行数。 #define PRINT_TRACE() printf("-------%s:%s:%d------\r\n", __FIL…...

(适趣AI)Vue笔试题

&#x1f4d1;前言 本文主要是【Vue】——&#xff08;适趣AI&#xff09;Vue笔试题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …...

Matytype的安装问题(word及PPT报错问题)

特别针对&#xff1a;mathtype安装了多次&#xff0c;又卸载了多次的用户。 Word报弹错错误&#xff1a;参考 mathtype安装后&#xff0c;打开word出现没找到dll的错误&#xff0c;这个问题较好解决。 如何解决MathType兼容Office 2016-MathType中文网 PPT&#xff08;PowerPoi…...

docker拉取镜像提示 remote trust data does not exist for xxxxxx

1、How can I be sure that I am pulling a trusted image from docker 2、docker: you are not authorized to perform this operation: server returned 401. 以上两个问题可以试试以下解决办法 DOCKER_CONTENT_TRUSTfalse 本人是使用jenkins部署自己的项目到docker容器出现…...

ElasticSearch Nested类型全文检索、聚合查询

ElasticSearch Nested类型全文检索、聚合查询 Nested类型全文检索 创建索引 PUT /products1 {"mappings": {"properties": {"fulltext": {"type": "text"},"name": {"type": "text","…...

专业级的渗透测试服务,助力航空业数字化安全启航

​某知名航空公司是中国首批民营航空公司之一&#xff0c;运营国内外航线200多条&#xff0c;也是国内民航最高客座率的航空公司之一。在数字化发展中&#xff0c;该航空公司以数据驱动决策&#xff0c;通过精细化管理、数字创新和模式优化等方式&#xff0c;实现了精准营销和个…...

【docker】安装 Redis

查看可用的 redis版本 docker search redis拉取 redis最新镜像 docker pull redis:latest查看本地镜像 docker images创建挂在文件 mkdir -pv /test1/docker_volume/redis/datamkdir -pv /test1/docker_volume/redis/confcd /test1/docker_volume/redis/conf/touch redis.con…...

pinia的独立维护,统一导出及持久化

目录 1.说明及示例 2.注意 1.说明及示例 在src下创建store文件夹&#xff0c;在store文件夹下创建index.js文件&#xff0c;内容如下&#xff1a; import { createPinia } from "pinia"; // pinia的持久化 import piniaPluginPersistedstate from "pinia-pl…...

【AI视野·今日Robot 机器人论文速览 第六十七期】Mon, 1 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 1 Jan 2024 Totally 16 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers MURP: Multi-Agent Ultra-Wideband Relative Pose Estimation with Constrained Communications in 3D Environments Authors A…...

FBL刷写

刷写 1、刷写需求的理解2、刷写流程2.1、预编程阶段&#xff1a;保证在编程阶段的动作能够正常操作&#xff0c;控制器给响应。整车功能不会出现问题 刷写某一控制器时&#xff0c;避免其他控制器集DTC,85控制DTC&#xff1b; 28 通信控制.保证总线负载率不要过高&#xff08;下…...

OpenCV-Python(24):模板匹配

原理及介绍 模板匹配是一种常用的图像处理技术&#xff0c;它用于在一幅图像中寻找与给定模板最匹配的区域(在一副大图中搜寻查找模版图像位置的方法)。模板匹配的基本思想是将模板图像在目标图像上滑动&#xff0c;并计算它们的相似度&#xff0c;找到相似度最高的位置即为匹配…...

机器学习--回归算法

&#x1f333;&#x1f333;&#x1f333;小谈&#xff1a;一直想整理机器学习的相关笔记&#xff0c;但是一直在推脱&#xff0c;今天发现知识快忘却了&#xff08;虽然学的也不是那么深&#xff09;&#xff0c;但还是浅浅整理一下吧&#xff0c;便于以后重新学习。 &#x1…...

品牌网站建设gs/线上营销怎么推广

现代人许多人一直对保险表示怀疑&#xff0c;除了知道要上国家的社会保险&#xff0c;对商业保险一直是不太相信&#xff0c;认为保险大多是骗人的。 下面就几个大的问题&#xff0c;对大家详解一下&#xff01; 保险&#xff0c;生的时候拿不了&#xff0c;死才有得拿&#xf…...

贵阳网站建设托管/嵌入式培训班一般多少钱

学习写一个最简单的web交互页面&#xff0c;可以向apache传送数据&#xff0c;通过cgi接受&#xff0c;并返回数据。 示例代码 View Code <input id"my" type"submit" value"submit"/><script type"text/javascript"> …...

找人做网站需要注意/廊坊关键词排名优化

在C/MFC中利用CMarkup类对XML进行操作 标签&#xff1a; 实用编程技术 一、什么是XML1 XML 是可扩展标记语言&#xff08;Extensible Markup Language&#xff09;的缩写&#xff0c;其中的 标记&#xff08;markup&#xff09;是关键部分。标记语言从早期的私有公司和政府制…...

在线正能量网站地址链接免费/高清视频网络服务器

今天写代码&#xff0c;碰到个问题&#xff0c;蒙圈了。问题描述&#xff1a;从后台传递数据到前台&#xff0c;后台代码如下&#xff1a;response.Write("IsContract", Count()>0 ? true: false);前台接受到的数据包含如下字段<IsContract>True</IsCon…...

北京网站设计公司济南兴田德润团队怎么样/引擎seo如何优化

Go语言channel实现等待所有任务完成package main//通过channel实现等待所有任务完成​import ("fmt""runtime""strconv""time")​func runTask2(i int) string {time.Sleep(time.Second*1)return strconv.Itoa(i)"返回的结果&quo…...

用c 做网站/唐山百度提升优化

python怎么打印菱形&#xff1f;下面给大家带来三种方法&#xff1a; 第一种 rows int(input(请输入菱形边长&#xff1a;\n)) row 1 while row < rows: col 1 # 保证每次内循环col都从1开始&#xff0c;打印前面空格的个数 while col < (rows-row): # 这个内层while就…...