我正在尝试将斐波那契函数从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语句来做到这一点。有人可以帮忙吗?谢谢。
在某些Scheme解释器中(尤其是在Racket中),所有if
表达式都必须包含两个部分:结果和替代(该else
部分)。因此,要修复您的代码,您应该嵌套这样的if
表达式(并注意缩进和关闭括号的建议方法):
(define (fib n)
(if (= n 1)
0
(if (= n 2)
1
(+ (fib (- n 1)) (fib (- n 2))))))
但说实话,当存在两个以上条件时,应该使用cond
而不是nesting if
s来编写和阅读:
(define (fib n)
(cond ((= n 1) 0)
((= n 2) 1)
(else (+ (fib (- n 1)) (fib (- n 2))))))
出于完整性考虑:对于那些确实要使用if
无else
零件的情况,可以使用when
。还有一点挑剔:定义的通常方法fibonacci
是返回0
if n
is 0
,并返回1
if n
is 1
; 因为这是您的实现,将返回不正确的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句