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

  • 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 知识点速查表

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

  1. 萌新的Python练习实例100例(六)斐波那契数列

    题目: 用Python写出斐波那契数列,并取出第10位数 分析: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibona ...

  2. Python练习案例(二)——斐波那契数列

    前言 大家好,今天我们主要练习的就是斐波那契数列,相信很多同学都对这个数列有一定的了解,今天就来试一试用python来写出斐波那契数列,并且画出他的图像. 正文 大家知道斐波那契数列其实是有规律的,如 ...

  3. python魔术方法(进阶)斐波那契数列

    文章目录 特殊属性 查看属性 实例化 可视化 hash bool 运算符重载应用场景 容器相关方法 可调用对象 上下文管理 上下文管理的安全性 方法的参数 contextlib.contextmana ...

  4. python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)

    文章目录 斐波那契数列 阿姆斯特朗数 十进制转二进制bin.八进制oct.十六进制hex 补充进制转换源码 python中::和:的区别 说明:本篇博文的知识点大部分来自 Python3 实例 斐波那 ...

  5. python中fib什么意思_Python斐波那契数列是什么?怎么用?

    小编第一次看到这个词的时候,比懵的状态,后来自己深入了解了下,原来这个内容并不难,于是整理了出来,一起来看下吧~ 需求 用Python脚本实现斐波那契数列. 思路 斐波那契数列,也称兔子数列,是指1, ...

  6. python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列

    黑马程序员 微信号:heiniu526 传智播客旗下互联网资讯,学习资源免费分享平台 大家在面试过程中经常会考到斐波那契数列,斐波那契数列(Fibonacci)最早由印度数学家Gopala提出,而第一 ...

  7. js输出100以内的质数_JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例...

    这篇文章主要介绍了JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 斐波那契 ...

  8. python(采用属猪输出斐波拉契数列前30个数,每行输出五个数)

    """ 功能:采用属猪输出斐波拉契数列前30个数,每行输出五个数 作者: 时间: """ fid = [1, 1] for i in ran ...

  9. Python输入整数n,求斐波拉契数列第n个数

    递归方法: # 输入整数n,求斐波拉契数列第n个数. # 思路: # 递归式算法: # 利用f(n) = f(n-1) + f(n-2)的特性来进行递归def fn(n):if n==0:return ...

最新文章

  1. window对象提供的功能之窗口最大化
  2. 戴尔官网全网抄底价! 企业级高性能机Vostro仅¥1,999!更有额外福利等你来领!...
  3. 【图像处理opencv】_图像几何变换
  4. 使用LinkedBlockingQueue来实现生产者消费者的例子
  5. 云计算时代,数据中心架构三层到大二层的演变
  6. 一步一步写算法(之洗牌算法)
  7. express rest_Express / Node中用于REST API的邮递员工具
  8. Mina网络通信框架
  9. 【Android】Android Studio中新创建的app目录结构
  10. 重温马尔科夫随机过程
  11. Google 开源 iOS 应用测试工具:EarlGrey
  12. 数独的优化回朔算法(二)
  13. 基于 python 的主成分分析步骤及应用实例
  14. UEFI开发探索101 – PCD探究
  15. 计算机网络复习训练题
  16. FreeNOS--项目的README
  17. fiddler抓APP的htpps請求,全部都是Tunnel to ......CONNECT...443的解决办法
  18. shape制作出来的虚线
  19. Map练习题:求地铁票价
  20. iphone4s刷机

热门文章

  1. redis的zset的底层实现_Redis(三)--- Redis的五大数据类型的底层实现
  2. android平台gallery2应用分析,Android5.1图库Gallery2代码分析数据加载流程
  3. 擎天出口退税软件_新版申报系统退税申报注意事项
  4. TP5:异常处理封装——3
  5. Django ORM
  6. Python中的元类及元类实现的单例模式
  7. go连接mysql数据库
  8. 逗号表达式的值--最后一项的值
  9. 前端学习(3158):react-hello-react之一个简单的helloworld
  10. 前端学习(2671): vue3.0脚手架获取功能页面布局