recursion - 如何在Racket或Scheme中使用递归来自动执行重复性任务?

标签 recursion scheme racket

我正在帮助我的兄弟(他将开始攻读计算机科学专业)进行函数式编程,我对此不太熟悉,但了解其原理。

您能否帮助我更正以下 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/

相关文章:

php - 正则表达式递归代码块内容

scheme - 在Racket或Scheme中,有没有办法将省略号语法对象转换为语法对象列表?

scheme - 方案中的 peek-char

终端中的 Racket 和 2htdp/image

c++ - 如何在不使用静态变量的情况下从递归函数调用另一个函数一次?

java - 递归方法适用于带有控制台的java,但不适用于android

lisp - Racket 博士中的mcons

function - 方案基本循环

scheme - 计划中的时间

java - 在递归对象上实现 equals 和 hashCode (JPA @ManyToMany)