You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我尝试用星号打印三角形失败,问题出在哪里?

代码问题分析与修正

原代码存在两个核心问题:

  • print 函数的 cond 分支顺序错误:当 x>0 时,第一个匹配的分支仅执行 (display "*"),后续递归调用的分支永远不会触发,导致无法打印对应数量的星号。
  • printA 函数缺少递归终止逻辑:无论 x 是否小于0,都会执行 (printA (- x 1)),引发无限递归。

修正后的代码如下:

(define (print x)
  (cond
    ((> x 0)
     (display "*")
     (print (- x 1))) ; 合并x>0的逻辑,打印*后递归
    ((= x 0) (newline)) ; x为0时换行
    ((< x 0) #t))) ; x小于0时返回#t,无操作

(define (printA x)
  (cond
    ((>= x 0) ; x非负时执行打印并递归
     (print x)
     (printA (- x 1)))
    ((< x 0) #t))) ; x小于0时终止递归

(printA 5)

执行这段代码后,会输出:

*****
****
***
**
*

内容的提问来源于stack exchange,提问作者Jeii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:00:18