当前位置: 首页 > article >正文

算法的学习笔记—不用常规控制语句求 1 到 n 的和

img

😀前言
在算法编程中,有时我们会遇到一些特殊的限制条件,这些限制会迫使我们跳出常规思维。本文讨论的问题就是一个典型案例:在不能使用基本控制语句的情况下,如何求解 1 到 n 的和。这个问题不仅考验编程技巧,更能帮助我们深入理解编程语言的底层特性。

🏠个人主页:尘觉主页

文章目录

  • 不用常规控制语句求 1 到 n 的和
    • 题目链接
    • 问题背景
    • 解决方案
      • 核心思路
      • 代码实现
      • 代码解析
    • 执行流程示例
    • 技术亮点
    • 时间空间复杂度
    • 😄总结

不用常规控制语句求 1 到 n 的和

题目链接

NowCoder

问题背景

本文将探讨一个特殊的算法问题:计算 1 到 n 的整数和,但不能使用以下语法结构:

  • 乘除运算符
  • 循环语句(for、while)
  • 条件语句(if、else、switch、case)
  • 三目运算符(A ? B : C)

解决方案

核心思路

该问题的解决方案利用了逻辑运算符 && 的短路特性。在 A && B 表达式中,如果 A 为 false,B 就不会被执行。这个特性可以替代传统的 if 语句来控制递归终止。

代码实现

public int Sum_Solution(int n) {
    int sum = n;
    boolean b = (n > 0) && ((sum += Sum_Solution(n - 1)) > 0);
    return sum;
}

代码解析

  1. 递归终止条件:

    • 使用 n > 0 作为第一个条件
    • 当 n = 0 时,表达式直接返回 false,不再执行后续递归
  2. 递归计算:

    • 将递归调用包装在 (sum += Sum_Solution(n - 1)) > 0 表达式中
    • 表达式必定大于 0,确保正确执行递归累加
  3. 结果存储:

    • 使用局部变量 sum 存储累加结果
    • 初始值设为当前的 n
    • 通过递归累加获得最终结果

执行流程示例

以 n = 3 为例:

  1. n = 3: sum = 3, 继续递归
  2. n = 2: sum = 3 + 2, 继续递归
  3. n = 1: sum = 3 + 2 + 1, 继续递归
  4. n = 0: 终止递归
  5. 最终结果:sum = 6

技术亮点

  1. 巧妙运用逻辑运算符的短路特性代替条件控制
  2. 通过递归实现循环累加
  3. 无需额外的数学公式或特殊运算符

时间空间复杂度

  • 时间复杂度:O(n),需要 n 次递归调用
  • 空间复杂度:O(n),递归调用栈的深度为 n

😄总结

这个解决方案展示了如何在严格的语法限制下,通过创新思维找到问题的解决方案。通过利用逻辑运算符的短路特性,我们不仅解决了问题,还加深了对编程语言特性的理解。这种解决思路提醒我们,在编程中,限制有时反而能激发创新,帮助我们发现语言特性的新用途。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img


http://www.kler.cn/a/470452.html

相关文章:

  • 计算机网络学习
  • 行为模式10.职责链模式
  • 9. C 语言 循环控制结构详解
  • NUTTX移植到STM32
  • 基于transformer的目标检测:DETR
  • 小R的蛋糕分享
  • Innodisk iSMART V6使用说明_SSD还能用多久?已经读写了多少次数?……
  • 依据多波段栅格数据进行建筑统计操作(基于ArcGIS操作)
  • Nginx linux安装步骤(超详细)
  • Flink DataSet API
  • 数据结构 - inode
  • 三甲医院等级评审八维数据分析应用(六)--数据安全与隐私保护篇
  • Python多分类Logistic回归详解与实践
  • 06.HTTPS的实现原理-HTTPS的握手流程(TLS1.3)
  • 数据分析思维(七):分析方法——群组分析方法
  • Go语言中的 os.Stat() 与 os.Lstat() 实际应用中,你该如何选择?
  • 高阶知识库搭建实战六、(向量数据库Faiss安装)(练习推荐)
  • Spring Boot 3 【八】整合实现高可用 Redis 集群
  • uniapp本地加载腾讯X5浏览器内核插件
  • TCP 如何获取端口信息
  • NLP项目实战——基于Bert模型的多情感评论分类(附数据集和源码)
  • go如何从入门进阶到高级
  • 【网络】ARP表、MAC表、路由表
  • 【Linux知识】Linux防火墙介绍
  • 【PtpBasics】- KRTS C++示例精讲(7)
  • docker中使用Volume完成数据共享