wxiaoxiongw 2024-02-18 00:08 采纳率: 0%
浏览 1

python的递归问题

为什么这个代码明明都递归三次了,总是结果为2啊,对于nums = [3,2,1,2,3,4]

class Solution:
    def maxOperations(self, nums: List[int]) -> int:
        n = len(nums)
        if n < 2:
            return 0
        @cache
        def dfs(start, end, aim):
            if end - start < 2:
                return 0
            if nums[start] + nums[start + 1] == aim:
                return 1 + dfs(start + 2, end, aim)
            if nums[start] + nums[end] == aim:
                return 1 + dfs(start + 1, end - 1, aim)
            if nums[end] + nums[end - 1] == aim:
                return 1 + dfs(start, end - 2, aim)
            return 0
        return max(dfs(0, n - 1, nums[0] + nums[1]), dfs(0, n - 1, nums[0] + nums[-1]), dfs(0, n - 1, nums[-1] + nums[-2]))

  • 写回答

4条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-18 00:09
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    这个代码的问题在于,它在进行递归时没有遍历数组的全部可能性。dfs 函数仅检查了相邻元素相加等于目标值 aim 的情况,并且只考虑了三种可能的情况:首两个元素相加、首尾元素相加和末尾两个元素相加。

    对于给定的输入数组 nums = [3, 2, 1, 2, 3, 4] 和函数设计,代码试图找到可以将数组分成几个子序列,使得任意两个子序列之和相等(也就是 aim 的值)。但当前实现并没有解决这个问题,所以结果并不正确。

    如果目标是寻找数组中能配对相加得到相同目标值的元素对的最大数量,那么需要重新设计算法来枚举所有可能的元素对,而不仅仅是当前代码中处理的几种特殊情况。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月18日

悬赏问题

  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥20 汇川小型plc控制小米微电机
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题