方案中的斐波那契函数

时间:2013-11-07 20:26:06

标签: python scheme fibonacci

我正在尝试将斐波那契函数从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语句来创建它。有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:4)

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

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

但说实话,当有两个以上的条件时,你应该使用cond而不是嵌套if,它会更容易编写并且更容易阅读:

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

为了完整起见:对于那些真正想要使用if但没有else部分的情况,您可以使用when。还有一点挑剔:定义fibonacci的常用方法是在0n时返回0,如果1则返回n1;因为它是你的实现将返回不正确的结果。

答案 1 :(得分:1)

尝试

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

语法为:

(if predicate consequent alternative)

,例如

(if (> 3 2) 'yes 'no)

但我建议您在案例中使用cond