DrRacket递归函数

时间:2016-03-28 21:08:03

标签: recursion racket

我是球拍编程语言的新手,所以作为快速测试,我在DrRacket上输入了这个:

>(define (test k)
 (when (not (= k 0))
  (begin
   k
    (test (- k 1)))))
>(test 5)

我期望输出: 54321

但反而得不到任何回报......

尝试了另一种方法:

>(define (test k)
  (when (not (= k 0))
   (begin
     (test (- k 1)) k)))
>(test 5)

但是这只打印了5号。我不确定发生了什么。我究竟做错了什么?非常感谢任何帮助,并提前非常感谢你!

2 个答案:

答案 0 :(得分:4)

如果要在控制台上显示该值,则必须显式打印,否则k的行无效 - 请记住,Scheme的核心是函数式编程语言和条件返回 last 表达式的值,所有其他语句只是为效果执行,但不返回值。一些提示:

(define (test k)
  (unless (zero? k)   ; use unless instead of when-not, zero? instead of (= x 0)
    (display k)       ; display prints in console
    (test (sub1 k)))) ; use sub1 instead of (- x 1)

答案 1 :(得分:0)

尝试了一种不同的方法,似乎产生了结果:

> (define (prnt k) k)
> (define (test k)
 (when (not (= k 0))
  (begin
   (print k)
    (test (- k 1)))))
> (test 5)

这打印54321这是我所期望的行为。不太确定为什么这样做但以前的尝试没有,但如果有人能够阐明这个话题,那将非常感激!