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

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

一、前言

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

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

二、我的环境

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

三、实验目的与要求

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

四、实验任务

1、程序填空

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

斐波那契数列的公式是:

在这里插入图片描述

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

在这里插入图片描述

def fibonacci(n):
    if n > 2:
        return fibonacci(n-1) + fibonacci(n-2)
    elif n == 2:
        return 1
    elif n == 1:
        return 1
x = eval(input("Input x="))
print(fibonacci(x))

它运行的结果是:

Input x=10
55

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

def fibonacci(n):
    if n > 2:
        return fibonacci(n-1) + fibonacci(n-2)
    elif n == 2:
        return 1
    elif n == 1:
        return 1
x = eval(input("Input x="))
print(fibonacci(x))
for i in range(1, x + 1) :
    print(fibonacci(i), end = " ")

它运行的结果是:

Input x=10
55
1 1 2 3 5 8 13 21 34 55

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

如下是二分法原理图:

在这里插入图片描述

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

它运行的结果是:

False
True

2、程序编程

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

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

首先递归表达式是:

在这里插入图片描述

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

它运行的结果是:

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

五、最后我想说

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

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

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值