课后练习 第4章 递归

R-4.1 对于一个含有n个元素的序列S,描述一个递归算法查找其最大值。所给出的递归算法的时间复杂度和空间复杂度各是多少?

import numpy as np


def find_max(s, n):
    """
    max= {s[0]                     n = 0
         {s[0:n-1]和s[n]中的最大值   n >= 1

    :param s: 含有n+1个数的列表
    :param n: 列表长度-1,列表最后一个元素的索引
    :return: 返回列表的最大值
        """
    if len(s) == 0:  # 列表为空,返回None
        return None
    if n == 0:  # 达到递归的基本情况:列表只有一个元素,最大值为s[0]
        return s[0]
    tmp_max = find_max(s, n - 1)
    return tmp_max if tmp_max > s[n] else s[n]  # 每次返回MAX(前n个数的最大值,最后一个元素)


if __name__ == '__main__':
    data = np.random.randint(0, 100, size=5, dtype=np.uint8)
    print(data)
    maxVal = find_max(data, 4)
    print("序列data的最大值为:" + str(maxVal))

R-4.2 使用再代码段4-11中实现的传统函数,绘制出power(2, 5)函数计算的递归跟踪。
在这里插入图片描述


R-4.3 如代码段4-12实现的函数所示,使用重复平方算法,绘制出power(2, 18)函数计算的递归跟踪。


R-4.6 描述一个递归函数,用于计算第n个调和数(harmonic number),其中 H n = ∑ i = 1 n 1 / i H_{n}=\sum_{i=1}^{n}1/i Hn=i=1n1/i

def harmonic_number(n):
    if n == 0:
        return None
    elif n == 1:
        return 1
    else:
        return harmonic_number(n-1) + 1 / n

if __name__ == '__main__':
    val = harmonic_number(4)
    print(val)

R-4.7 描述一个递归函数,它可以把一串数字转换成对应的整数。例如,13531’对应的整数为13531。

def convert_int(str, n):
    if len(str) == 0:
        return None
    elif n == 0:
        return int(str[0])
    else:
        return convert_int(str, n-1) + int(str[n]) * (10**n)
        
if __name__ == '__main__':
    str = '13531'
    print(convert_int(str, len(str) - 1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值