运用递归搞定单次循环打印菱形的问题

while 循环与循环嵌套 while当条件为真,就重复执行代码块;条件为假,就结束循环。"只要还没吃饱,就继续吃"—— 你不知道要吃多少口,只知道什么时候该停。特性说明示例语法while 条件:执行逻辑条件为真就执行,执行完再判断可能执行0次、1次或多次适用场景不知道循环次数,只知道结束条件猜数字、用户输入验证else子句循环正常结束时执行(非break退出)for vs while 选择指南│ 需要循环吗?││ ├── 知道循环次数?│。 阅读详情
 
/**
打印效果如下
   * 
  * *
 * * *
  * *
   *
 * 根据回溯想到的旧问题的新算法
 * @author LeLe
 *
 */
public class PrintTriangle {
   
    /**
     * 第一次写出的
     * @param times
     * @param ask
     */
    void printA(int times,boolean ask){
        for (int i = 5; i > 0; i--) {
            if(i<=5-times+1)
            System.out.print(" *");
            else
            System.out.print(" ");
        }
        System.out.println("");
        if(times >1&&ask)
            this.printA(times-1,true);
        if(ask)
            this.printA(times+1,false);
    }
    /**
     * 根据第一次写出进行优化的
     * @param times
     * @param ask
     */
    void printB(int times,boolean ask){
        for (int i = 5; i > 0; i--) {
            if(i<=5-times+1)
            System.out.print(" *");
            else
            System.out.print(" ");
            if(i == 1)
                System.out.println("");
            if(i==1&&times>1&&ask)
                this.printB(times -1,true);
            if(i==1&&ask)
                this.printB(times+1,false);
        }
    }
   
    public static void main(String[] args){
        PrintTriangle p = new PrintTriangle();
        long a = System.currentTimeMillis();
        p.printB(5,true);
        long b = System.currentTimeMillis();
        System.out.println("执行时间为 "+(b-a)+"毫秒");
    }
 
} 
SCAU华南农业大学 C语言OJ实验通关指南:从入门到精通的实战解析 本文详细解析了SCAU华南农业大学C语言OJ实验通关指南,从基础语法到高级数据结构,涵盖常见算法、调试技巧及考试策略。通过实战代码示例和易错点分析,帮助读者快速掌握C语言编程精髓,提升OJ平台解题效率。 阅读详情

相关推荐

别再手画流程图了!用yEd从零到一搞定1加到100的编程逻辑(附透明节点技巧)

本文详细介绍了如何使用yEd工具从零开始绘制1加到100的编程逻辑流程图,并分享了透明节点技巧解决线条指向问题。通过智能布局引擎和极简交互设计,yEd能高效构建专业流程图,帮助开发者理清算法思路,提升团队沟通效率。

weixin_27015733的博客 170

用递归解决一些问题

1.浅谈递归的理解 有时候,对于一个复杂问题的求解,我们可以考虑通过一些步骤,将复杂的问题转化成规模变小的相同问题进行求解。最后一层一层传递下去,只要我们解决了规模最小的、不可再分解的问题后,逐级回溯也就解决了规模较大的复杂问题。 学会递归,就是学会分解,在我看来就是要学会将问题的求解分步拆解,并考虑周全。 什么叫拆解成类似的子问题呢?比如有一个问题叫做跑100米,我们可以将其分步进行:先跑10米,再解决子问题:跑90米,这样我们就成功地将问题的规模从跑100米,缩小成了跑90米。而父子问题都是类似的,都是

qq_51690757的博客 710

程序员效率神器:RAPTOR可视化算法工具从入门到精通

本文深入介绍了RAPTOR可视化算法工具,它远不止于流程图绘制,而是程序员提升效率的利器。作为一款快速算法原型工具,RAPTOR允许用户通过拖拽图形直接构建可执行的算法流程,实现算法逻辑的可视化单步调试与实时验证。文章从安装配置、核心概念讲起,并通过累加求和等实例手把手教学,展示了其在算法学习、教学演示和快速逻辑验证中的强大应用,能有效帮助开发者梳理思维、提升效率。

weixin_28312391的博客 246

【PTA】7-8 显示菱形 (10point(s))

请编写函数,输入菱形的行数和组成菱形的字符,输出对应的菱形图像。 输入样例 5 $ 输出样例 $ $$$ $$$$$ $$$ $ 要求:若行数小于等于 0,则输出 None;若行数是偶数,则输出Error。 #include<stdio.h> int main() { int n; char c; scanf("%d %c",&n,&c); if...

ReganYue's Blog 4016

翁恺C语言习题集深度刷题指南:从入门到精通的实战经验

C语言作为编程入门的基石,其学习路径常困扰初学者:语法看得懂,代码写不出。翁恺老师的C语言程序设计习题集以梯度合理、覆盖全面著称,从顺序结构到指针、文件操作,循序渐进地强化编程思维。刷题不仅是为通过OJ评测,更是培养边界意识与代码严谨性的关键手段。冒泡排序、字符串逆序、文件读写等高频考题,往往在面试与机试中改头换面出现,掌握核心原理方能举一反三。面对“源码”“PTA练习题”等海量资源,正确方法是独立完成后再对比复盘,避免陷入抄代码的误区。本文从环境配置、语法图谱到典型题型拆解,系统梳理了高效刷题路径,为自学

weixin_29243063的博客 264

VB6.0过程的递归调用

VB6.0过程的递归调用:在调用一个子程序或函数的过程中又出现直接或间接调用该子程序或函数本身,称为过程的递归调用。

Python继承陷阱与安全设计:从MRO到Mixin工程化

Python继承并非简单的代码复用机制,而是一种运行时控制权委托协议。其核心原理依赖MRO(方法解析顺序)和C3线性化算法,确保方法调用路径可预测;但真正影响系统稳定性的,是初始化链断裂、参数透传缺失及Mixin契约违约等工程实践问题。这类问题在Django模型、FastAPI依赖注入、Pydantic组合场景中高频出现,常导致静默失效而非显式报错。技术价值在于构建可维护、可扩展、可测试的类体系——通过统一*args/**kwargs签名、__init_subclass__编译期校验、组合替代菱形继承等手段

weixin_30655569的博客 362

CMake、Make、MinGw、Clang、Llvm、GCC、MSVC的区别

除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具;的缩写,MinGw是windows版本的gcc集合。并不仅是一个 C/C++ 编译器,而是一套。是微软开发的VC运行时库,3、Make和CMake是。

m0_37698164的博客 1万+

C语言入门50题:从基础语法到算法思维的实战训练

编程的核心在于将问题转化为计算机可执行的精确指令序列,这需要扎实的计算思维和流程控制能力。C语言作为系统编程的基石,其学习过程尤其强调对内存、数据类型和底层逻辑的深刻理解。通过经典例题训练,如变量交换、条件判断、循环迭代和数组操作,开发者能掌握将自然语言描述转化为有效代码的原理。这种训练不仅夯实了语法基础,其技术价值更体现在为后续学习指针、数据结构及系统编程搭建了稳固的逻辑脚手架。在应用场景上,无论是算法实现、字符串处理还是模块化设计,这些基础能力都是工程实践中调试、优化和构建可靠程序的必备技能。本文聚焦C

weixin_32050773的博客 307

【ISAR成像定标方法(1)—转台目标的RD成像算法MATLAB仿真】

ISAR成像定标方法的研究具有重要意义,但是与之相关的学习资料以及仿真对于小白来说很难找或者很杂乱,本人作为小白之一在研究过程中苦不堪言,现在自己所要研究的定标内容已经完成,以后还学不学雷达也不一定,因为后面的路更难,现在打算把一些相关推导和仿真结果列出来,以供小白交流学习使用,希望能有点帮助。(PS:由于公式和符号的原因,采用图片形式说明)

此木旧年的博客 6418

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5139

面试问题合集

回答结构(STAR法则)“我介绍一个智能门禁系统的项目。项目背景:这是一个基于Qt和OpenCV的跨平台门禁系统,解决小区/办公室的访客管理和门禁授权问题。我的职责:我独立完成了人脸识别模块和数据库模块。技术实现:人脸识别用OpenCV的Haar Cascade做检测,然后通过灰度化、缩放到32x32、归一化提取特征向量,匹配时用余弦相似度。数据库用SQLite,我用Repository模式封装了数据访问。重难点:性能优化方面,我把视频处理放到子线程避免卡界面;

丰锋的博客 243

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1025

C++编程启蒙进阶:从信息学奥赛3091-3100题掌握逻辑模拟与调试技巧

循环控制、条件判断和基本运算是编程的核心基础概念,它们构成了解决实际问题的基本逻辑框架。其原理在于通过顺序、分支和循环三种基本结构,将现实世界的复杂规则转化为计算机可执行的指令序列。掌握这些基础技术的价值在于能够培养严谨的计算思维,这是从“认识语法”迈向“运用语法解决问题”的关键过渡。在应用场景上,这类技术广泛出现在流程模拟、数据统计和格式转换等实际问题中,例如快递费用计算、成绩统计和数字变换等。本文以信息学奥赛典型题目为切入点,深入剖析了多条件约束模拟、带终止条件的累加计数等经典题型,并针对变量初始化、整

weixin_34074740的博客 501

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 532

具身智能:原理、算法与系统 第16章 运动控制基础

实时迭代(Real-Time Iteration, RTI)策略在每个采样时刻执行有限次迭代(通常一次),利用相邻时刻解的连续性,在严格时间限制内获得可行解。比例-积分-微分(Proportional-Integral-Derivative, PID)控制是工业界最广泛应用的控制策略,其原理基于误差的当前值(比例)、累积值(积分)与变化率(微分)的线性组合。力-位置混合控制(Hybrid Force/Position Control)将任务空间分解为力控制子空间与位置控制子空间,分别控制。

VectorShift的博客 146

机试(蓝桥杯)入门级教程

一、都要干什么呢 1.常用排序算法 2.只需要学递归、分治、贪心、动态规划 3.可以学一下STL库函数 4.编程题可以只写输入输出语句,与样例即可(因为第一个测试数据一般就是样例) 二、题目 题目描述 1.假设你有一个数组,其中第\ i i 个元素是股票在第\ i i 天的价格。 你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。 class Solution { public: /** * * @param prices int

qq_44886213的博客 3098

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1333

Java编程规范与常见误区详解·表格

本文系统梳理了Java编程的核心知识点,涵盖七个关键领域:1. 源文件规范:明确一个源文件可包含多个类但仅限一个public类,文件名必须与public类名一致,并解析了import导包规则。2. 基础语法:详细说明标识符命名规则(禁止数字开头/关键字等)、8种基本数据类型(默认值/范围/类型转换)及作用域规则(局部变量无默认值需初始化)。3. 流程控制:对比四种循环结构(while/do-while/for/增强for)的特性与适用场景,以及if与switch分支的选择策略。4. 数组特性:强调长度不可变

AA_AA114514的博客 409

Fabric V2.5 通用溯源系统——使用Hyperledger Caliper压力测试

Caliper是一款测试区块链性能的工具,支持Hyperledger Fabric、Ethereum等,支持丰富的测试配置参数,测试完成后将直接输出报告,相较于tape更加专业,但是配置稍微有些复杂。本文将一步一步配置Caliper以测试Fabric V2.5 通用溯源系统中的注册用户、查询用户、农产品上链、农产品查询的区块链性能。

TrueTechLabs 官方博客 1396

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++零基础入门指南:从命令行编译到STL实战项目

编程语言作为计算机科学的核心基础,其学习路径设计直接影响初学者的掌握效率与学习信心。以C++为例,这门语言以其高性能和底层控制能力,在系统开发、游戏引擎和高频交易等领域占据重要地位。理解其从源代码到可执行文件的编译原理,是掌握编程思维的第一步,这通常涉及预处理、编译、链接等关键环节。在技术价值层面,C++不仅培养了程序员对内存管理和性能优化的深刻理解,其标准模板库(STL)更提供了高效、泛型的容器与算法,极大提升了开发效率与代码质量。应用场景广泛,从操作系统、嵌入式系统到大型游戏服务器,都能见到C++的身影

weixin_34014555的博客 440

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python面试八股20问:从对象模型到运行机制全解析

在Python语言学习中,理解对象模型与内存管理是夯实基础的关键,比如is与==的区分、深拷贝与浅拷贝的本质差异,都源于对象引用与身份标识的底层逻辑。与此同时,解释器运行机制如GIL、垃圾回收策略,决定了并发编程与资源管理的选型思路。装饰器、生成器、闭包等进阶特性,则体现了Python简洁而强大的设计哲学,也是面试中拉开差距的常见考点。围绕这些高频技术概念,系统梳理其原理与工程实践价值,不仅能应对面试中的典型问题,更能帮助开发者真正掌握Python的设计思维。从基础语法到运行机制,从易错细节到进阶特性,全面

weixin_34320724的博客 405

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机二级公共基础知识“保姆级”考点整理:看完这篇,拿不下分你来打我!

计算机二级公共基础知识考点速记:数据结构与算法(时间复杂度、二叉树遍历)、程序设计基础(三大结构、面向对象)、软件工程(生命周期、测试方法)和数据库设计(E-R图、关系运算)。重点掌握二叉树性质、排序算法效率、软件测试目的等核心概念,通过理解加记忆即可轻松应对考试。建议考前重点突击名词解释,考试时合理分配时间,避免死磕难题。这些知识虽抽象但实用,是计算机应用的底层逻辑,也是求职升学的重要加分项。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 1059
上一篇: 从经典的八皇后问题看回溯
下一篇: 同样经典的最短路径算法
mohamode
博客等级 码龄19年 4粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值