方案中的斐波那契函数

chanpkr

我正在尝试将斐波那契函数从python转换为scheme,

def fib(n):
    if n == 1:
        return 0
    if n == 2:
        return 1
    return fib(n-1) + fib(n-2)

(define (fib n)
    (if (= n 1)
         0)
    (if (= n 2)
         1)
    (+ fib (- n 1)) (fib (- n 2)))

我在这里得到错误,因为显然方案需要else声明。但是,作为一个新手计划的学习者,我不知道如何使用else语句来做到这一点。有人可以帮忙吗?谢谢。

奥斯卡·洛佩兹(Oscar Lopez)

在某些Scheme解释器中(尤其是在Racket中),所有if表达式都必须包含两个部分:结果和替代(该else部分)。因此,要修复您的代码,您应该嵌套这样的if表达式(并注意缩进和关闭括号的建议方法):

(define (fib n)
  (if (= n 1)
      0
      (if (= n 2)
          1
          (+ (fib (- n 1)) (fib (- n 2))))))

但说实话,当存在两个以上条件时,应该使用cond而不是nesting ifs来编写和阅读:

(define (fib n)
  (cond ((= n 1) 0)
        ((= n 2) 1)
        (else (+ (fib (- n 1)) (fib (- n 2))))))

出于完整性考虑:对于那些确实要使用ifelse零件的情况,可以使用when还有一点挑剔:定义的通常方法fibonacci是返回0if nis 0,并返回1if nis 1; 因为这是您的实现,将返回不正确的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章