我尝试用星号打印三角形失败,问题出在哪里?
代码问题分析与修正
原代码存在两个核心问题:
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
相关产品推荐
相关产品推荐

