博客
关于我
剑指 Offer 64. 求1+2+…+n-Python题解
阅读量:514 次
发布时间:2019-03-07

本文共 813 字,大约阅读时间需要 2 分钟。

为了求解1+2+…+n的和,而不使用循环、条件判断等关键字,我们可以采用递归的方式,并通过递归深度来控制递归的终止。具体来说,我们定义一个递归函数,传递当前的n值和递归深度(即剩余的次数),每次递归调用时,递减n和递归深度,直到递归深度为0,此时返回当前的n值。通过这种方法,我们可以避免使用条件判断,而是利用递归深度来控制计算过程。

解决方案代码

求1+2+…+n的和,要求不能使用乘除法、for、while、if、else、switch等关键字及条件判断语句。

示例 1:

输入: n = 3

输出: 6
示例 2:

输入: n = 9

输出: 45

限制:

1 ≤ n ≤ 10000

class Solution:    def sumNums(self, n: int) -> int:        def helper(n: int, times: int) -> int:            if times == 0:                return n            return helper(n - 1, times - 1) + n        return helper(n, n)

代码解释

  • 定义内部递归函数helper(n, times)用于计算从1到n的和。其中,times表示递归的剩余次数。

  • 递归终止条件:当times为0时,返回当前的n值,因为此时已经完成了递归的所有步骤。

  • 递归调用:每次递归调用时,递减n和递归深度(即times减1),并将当前的n值加到结果中。

  • 主函数调用sumNums(n)调用helper(n, n),并返回结果。

  • 这种方法通过递归深度来控制计算过程,避免了使用条件判断语句,满足了题目的所有限制条件。

    转载地址:http://suwjz.baihongyu.com/

    你可能感兴趣的文章
    netsh advfirewall
    查看>>
    Netty WebSocket客户端
    查看>>
    Netty 异步任务调度与异步线程池
    查看>>
    Netty中集成Protobuf实现Java对象数据传递
    查看>>
    Netty工作笔记0006---NIO的Buffer说明
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0013---Channel应用案例4Copy图片
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0020---Selectionkey在NIO体系
    查看>>
    Vue踩坑笔记 - 关于vue静态资源引入的问题
    查看>>
    Netty工作笔记0025---SocketChannel API
    查看>>
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>