Python编程基础:实验6——函数的递归

简介: 有关Python函数递归的一些题目,非常经典,开箱即用。

一、前言

本期博客主要练习有关函数的递归方法,函数的递归有很多经典的例子,在这里我就写一下老师提供的几个题目,如果还想继续做相关题目的话,大家可以去力扣上面刷题。

注意:代码仅供参考,还请大家多多思考!

二、我的环境

  • 电脑系统:Windows 11
  • 语言版本:Python 3.10.4
  • 编译器:VSCode

三、实验目的与要求

  1. 掌握函数递归的定义和使用方法
  2. 理解实验中的经典递归算法思想

四、实验任务

1、程序填空

【填空8-1】采用递归思想,编程求斐波那契数列的指定项,指定项由键盘输入,请在代码的横线处补充。

斐波那契数列的公式是:

20200410170206910.png

如下是斐波那契数列计算过程的动态图:

2-210R0100005236.gif

deffibonacci(n):
ifn>2:
returnfibonacci(n-1) +fibonacci(n-2)
elifn==2:
return1elifn==1:
return1x=eval(input("Input x="))
print(fibonacci(x))

它运行的结果是:

Inputx=1055

如果要显示斐波那契数列数列的前n项,n由键盘输入,我们可以这样修改以上程序来实现:

deffibonacci(n):
ifn>2:
returnfibonacci(n-1) +fibonacci(n-2)
elifn==2:
return1elifn==1:
return1x=eval(input("Input x="))
print(fibonacci(x))
foriinrange(1, x+1) :
print(fibonacci(i), end=" ")

它运行的结果是:

Inputx=105511235813213455

【填空8-2】采用递归思想,以二分法查找有序列表的指定值,请在代码的横线处补充。

如下是二分法原理图:

v2-6251fe5159bb30c0d34b3eeebd4257d3_b.png

defdichotomy(alist, item):
iflen(alist) ==0:     # 查找范围为空返回找不到FalsereturnFalseelse:
midpoint=len(alist) //2# 求查找范围的中间点ifalist[midpoint] ==item:
returnTrueelse:
# 待查值小于中间点,即缩小查找范围为中间点左半侧ifitem<alist[midpoint]:
returndichotomy(alist[: midpoint] , item)
# 待查值大于中间点,即缩小查找范围为中间点右半侧else:
returndichotomy(alist[midpoint+1:], item)
testlist= [0, 1, 2, 8, 13, 17, 19, 32, 42]
print(dichotomy(testlist, 3))
print(dichotomy(testlist, 13))

它运行的结果是:

FalseTrue

2、程序编程

【编程8-1】采用递归思想,将一个正整数倒序输出,例如给出正整数n=12345,即输出54321。

提示:首先输出这个数的个位数,然后再输出前面数字的个位数,直到之前没有数字为止。

首先递归表达式是:

函数递归.jpg

rev_num=0base_pos=1defreversDigits(n):
globalrev_numglobalbase_posif(n>0):
reversDigits(int(n/10))
rev_num+= (n%10) *base_posbase_pos*=10returnrev_numn=eval(input("请给出正整数n="))
print("倒序输出后结果是:",reversDigits(n))

它运行的结果是:

请给出正整数n=12345倒序输出后结果是:54321

五、最后我想说

本期内容就涉及到了函数递归的相关算法,我们首先要去理解它的原理才能更好更快的写出对应的程序,所以还是很有必要去看一下相关的数学原理。

除了上面所提到的题目,还有很多经典的例子,比如汉诺塔、数的阶乘等等,网上有很多,各种语言版本都有,大家可以去看一看,然后练一练,毕竟熟能生巧。

北天
+关注
目录
打赏
0
0
1
0
300
分享
相关文章
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
Python 高级编程与实战:深入理解并发编程与分布式系统
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发、API 设计、网络编程和异步IO。本文将深入探讨 Python 在并发编程和分布式系统中的应用,并通过实战项目帮助你掌握这些技术。
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
10月前
|
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
121 0
Python编程的函数—内置函数
Python编程的函数—内置函数
34 0
|
10月前
|
Python编程实验四:函数的使用
Python编程实验四:函数的使用
136 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等