Python-100例(5-6) 排序斐波那契数列

前面分享的四道题目如下:

  • Python-100 | 练习题 01 & 列表推导式
  • Python-100 练习题 02
  • Python-100 练习题 03 完全平方数
  • Python-100 练习题 04 判断天数

这次是分享 Python-100 例的第五和第六题,分别是排序和斐波那契数列问题,这两道题目其实都是非常常见的问题,特别是后者,一般会在数据结构的教程中,讲述到递归这个知识点的时候作为例题进行介绍的。


Example-5 排序

题目:输入三个整数 x,y,z,请把这三个数由小到大输出。

思路

考虑令 x 保存最小的数值,即先令 x 分别和 y,z 作比较,通过比较后,x变成最小值,接着 y 和 z 比较,即可完成排序

代码实现

代码实现上有两种,一种就是手动实现排序过程,另一种就是采用内置函数。

def sort_numbers_1():x = int(input('integer:\n'))y = int(input('integer:\n'))z = int(input('integer:\n'))print('input numbers: x=%d, y=%d, z=%d' % (x, y, z))if x > y:x, y = y, xif x > z:x, z = z, xif y > z:y, z = z, yprint('sorted: x=%d, y=%d, z=%d' % (x, y, z))# 利用列表的内置函数 sort()
def sort_numbers_2():l = []for i in range(3):x = int(input('integer:\n'))l.append(x)print('original list:', l)l.sort()print('sorted:', l)

测试样例如下:

# sort_numbers_1()运行结果
integer:
1
integer:
0
integer:
5
input numbers: x=1, y=0, z=5
sorted: x=0, y=1, z=5# sort_numbers_2() 运行结果
integer:
1
integer:
0
integer:
5
original list: [1, 0, 5]
sorted: [0, 1, 5]

Example-6 斐波那契数列

题目:斐波那契数列

思路

斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…

数学上的定义如下:

n=0: F(0)=0
n=1: F(1)=1
n>=2: F(n)=F(n-1)+F(n-2)

代码实现

需要输出斐波那契数列的第 n 个数,实现方法如下,既可以通过迭代实现,也可以利用递归实现:

# 采用迭代循环实现
def fib1(n):a, b = 1, 1# n 必须大于等于 2for i in range(n - 1):a, b = b, a + breturn a# 递归实现
def fib2(n):if 0 < n <= 2:return 1else:return fib2(n - 1) + fib2(n - 2)

如果是需要输出给定个数的所有斐波那契数列,代码如下:

# 输出指定个数的斐波那契数列
def fib_array(n):if n == 1:return [1]if n == 2:return [1, 1]fibs = [1, 1]for i in range(2, n):fibs.append(fibs[-1] + fibs[-2])return fibs

测试结果如下:

a1 = fib1(10)
a2 = fib2(10)
fibs = fib_array(10)
print('fib1 result=', a1)
print('fib2 result=', a2)
print('fib array=', fibs)# 输出结果
# fib1 result= 55
# fib2 result= 55
# fib array= [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

另外,这里更推荐采用迭代实现斐波那契数列,而不是递归做法,主要是递归实现一方面是调用函数自身,而函数调用是有时间和空间的消耗,这会影响效率问题,另一方面是递归中很多计算都是重复的,它本质上是将一个问题分解成多个小问题,这些多个小问题存在相互重叠的部分,也就会出现重复计算的问题。

这里选择 n=30,计算两种方法使用的时间,结果如下:

start = time.time()
a1 = fib1(30)
print('fib1 cost time: ', time.time() - start)
print('fib1 result=', a1)
start2 = time.time()
a2 = fib2(30)
print('fib2 cost time: ', time.time() - start2)
print('fib2 result=', a2)

输出结果如下:

fib1 cost time:  0.0
fib1 result= 832040
fib2 cost time:  0.39077210426330566
fib2 result= 832040

可以看到递归实现所需要的时间明显大于迭代实现的方法。

因此,尽管递归的代码看上去更加简洁,但从实际应用考虑,需要选择效率更高的迭代实现方法。


小结

今天分享的两道题目就到这里,如果你有更好的解决方法,也可以在下方留言,谢谢。


欢迎关注我的微信公众号–机器学习与计算机视觉,或者扫描下方的二维码,大家一起交流,学习和进步!

往期精彩推荐

Python-100 练习系列
  • Python-100 | 练习题 01 & 列表推导式
  • Python-100 练习题 02
  • Python-100 练习题 03 完全平方数
  • Python-100 练习题 04 判断天数
机器学习系列
  • 机器学习入门系列(1)–机器学习概览
  • 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)
  • 机器学习数据集的获取和测试集的构建方法
  • 特征工程之数据预处理(上)
  • 特征工程之数据预处理(下)
  • 特征工程之特征缩放&特征编码
  • 特征工程(完)
  • 常用机器学习算法汇总比较(上)
  • 常用机器学习算法汇总比较(中)
Github项目 & 资源教程推荐
  • [Github 项目推荐] 一个更好阅读和查找论文的网站
  • [资源分享] TensorFlow 官方中文版教程来了
  • 必读的AI和深度学习博客
  • [教程]一份简单易懂的 TensorFlow 教程
  • [资源]推荐一些Python书籍和教程,入门和进阶的都有!
  • [Github项目推荐] 机器学习& Python 知识点速查表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

东北农业大学大学计算机基础作业答案,大学计算机基础实践教学改革的研究

针对目前大学计算机基础实践教学中存在的问题,提出了教学内容、教学方法、教学模式、考试形式等方面的改革方案,并在实践中不断践行和完善,达到预期的教学效果,为提高实践教学质量提供参考。第 o第。 卷期201 2年 6月东北农业大学学报 (会科学版)社V0 . 0 N . 11 o 3J n 2 2 u …

关于春招 秋招面试的一些经验

2019 年第 24 篇&#xff0c;总 48 篇文章本文大约 5000 字&#xff0c;阅读大约需要 15 分钟周末了&#xff0c;就不写技术了&#xff0c;来聊聊关于春招/秋招面试的事情&#xff0c;刚好最近也是逐渐开始春招找实习或者找工作的时候了&#xff0c;我就介绍一些当初准备春招实…

计算机win7内容已满,Win7旗舰版电脑C盘满了怎么清理

有些小伙伴电脑用着用着&#xff0c;突然发现C盘磁盘空间以及满了&#xff0c;打开C盘却不知道该删哪些、该留下哪些。C盘空间满了可能是将软件下载到C盘或是垃圾文件积累过多&#xff0c;下面就给大家分享一下Win7旗舰版电脑C盘满了的清理方法。电脑C盘清理方法&#xff1a;首…

常用机器学习算法汇总比较(完)

机器学习入门系列&#xff08;2&#xff09;–如何构建一个完整的机器学习项目&#xff0c;第九篇&#xff01; 该系列的前八篇文章&#xff1a; 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理&#…

css块元素与行内元素特点,CSS区分块级元素和行内元素

块级元素(块级元素一般当做容器使用&#xff0c;既可以容纳内联元素也可以容纳块级元素)特点&#xff1a;1.每个块级元素都是独自占一行&#xff0c;其后的元素也只能另起一行&#xff0c;并不能两个元素共用一行。2.元素的高度、宽度、行高和顶底边距都是可以设置的。3.元素的…

【android开发】如何在Linux平台下安装JDK环境

原文&#xff1a;http://android.eoe.cn/topic/android_sdk Linux平台JDK安装 本文主要描述如何在Linux平台下安装JDK环境。进入网页&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 如下图&#xff1a; 这里作为开发人员&#xff0c;我们选择…

[Github项目推荐] 推荐三个助你更好利用Github的工具

2019 年第 26 篇&#xff0c;总 50 篇文章本文大约 1700 字&#xff0c;阅读大约需要 5 分钟作为一名程序员&#xff0c;学会使用 Github 是一个必备技能&#xff0c;正如同需要学会利用谷歌搜索问题的解决方案一样。今天&#xff0c;就推荐3个助你更好使用 Github 的工具&…

Python-100例(7-8) 复制列表 打印乘法口诀

前面分享的六道题目如下&#xff1a; Python-100 | 练习题 01 & 列表推导式Python-100 练习题 02Python-100 练习题 03 完全平方数Python-100 练习题 04 判断天数Python-100例(5-6) 排序&斐波那契数列 这次是分享 Python-100 例的第 7-8 题&#xff0c;分别是复制列表…

简单聊聊模型的性能评估标准

机器学习入门系列&#xff08;2&#xff09;–如何构建一个完整的机器学习项目&#xff0c;第十篇&#xff01; 该系列的前 9 篇文章&#xff1a; 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理&…

失落城堡手游获取服务器信息99,失落城堡手游最近更新什么? ios同步疯国王击杀活动...

失落城堡手游1.1.0.20优化什么&#xff1f;作为活动副本&#xff0c;有着出色玩法。小编带来玩法详情&#xff0c;新版战斗来临。ios同步疯国王击杀活动【新增类】1、支持适配盖世小鸡手柄&#xff1a;-安卓&#xff1a;Gamesir-G4(增强版)、Gamesir-G4、飞智八爪鱼、Gamesir-G…

中文课程!台大李宏毅机器学习公开课2019版上线

转载自&#xff1a;机器之心机器之心编辑参与&#xff1a;思源、泽南台大教授李宏毅的机器学习课程经常被认为是中文开放课程中的首选。李教授的授课风格风趣幽默&#xff0c;通俗易懂&#xff0c;其课程内容中不仅有机器学习、深度学习的基础知识&#xff0c;也会介绍 ML 领域…

wcl怀旧服网站中文查服务器fb进度,魔兽世界怀旧服wa插件字符串分享 WCL评分和服务器排行查询...

魔兽世界怀旧服wa插件字符串分享&#xff0c;使用本字符串后&#xff0c;当团队有新团员时&#xff0c;自动通报其职业、服务器排名、TAQ评分/排名、BWL评分/排名、MC评分/排名。需要的朋友快来分享吧。NGA夜梦幻整理&#xff0c;先上效果图增加了仅团长/队长/A人员通报开关首先…