我正在帮助我的兄弟(他将开始攻读计算机科学专业)进行函数式编程,我对此不太熟悉,但了解其原理。
您能否帮助我更正以下 Racket 脚本以显示 Hello World 10 次,而无需更改或添加“显示”等特定方法?
谢谢
#lang Racket
(define (HelloWorld n)
(cond [(= n 0) " "]
[(= n 1) "Hello, world !"]
[(> n 1) (HelloWorld (- n 1))]
)
)
最佳答案
您的程序将显示“Hello World!”仅一次,因为在递归调用中您不会打印任何内容。仅返回调用的最终结果,其中包含字符串“Hello World!”。
另一方面,显示n次字符串而不打印它的唯一方法是通过连接n次字符串来产生结果。例如:
#lang Racket
(define (HelloWorld n)
(if (<= n 0)
""
(string-append "Hello, world ! " (HelloWorld (- n 1)))))
> (HelloWorld 10)
"Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! Hello, world ! "
注意递归是如何工作的:最后的情况是 n <= 0
(这比 n = 0
更好,可以避免负输入的无限递归),在这种情况下,结果是空字符串。万一n > 0
将字符串与应用于 n-1
的函数结果连接起来即可获得结果.
关于recursion - 如何在Racket或Scheme中使用递归来自动执行重复性任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31902090/