2016-06-27 10 views
1

は、第二のfib(n)が動作しdoesentなぜ私は2つのバージョン、ヌル表現

def fibonacci(n) 
    return n if (0..1).include? n 
    (fibonacci(n - 1) + fibonacci(n - 2)) 
end 
puts fibonacci(5) 


def fib(n) 
    if n == (0..1) 
    return n 
    elsif 
    return fib(n-1) + fib(n-2) 
    end 
end 
puts fib(5) 

考えフィボナッチの2つのバージョンがありますか?

答えて

2

nが数字の場合、n == (0..1)が決して満たされないためです。範囲0..1は数字ではありません。最小修正は次のとおりです。

(0..1) === n 
+0

ハァッを逆にする必要がありますか?それで最初の作品はなぜ機能しますか? –

+0

あなたのコメントと同じくらい違反がある場合は、私の回答を削除します。 – sawa

+0

いいえ、私は本当に混乱しています。 –

2

あなたは(あなたが何のケースを持っていないので)elseの賛成でelsifを削除し、また===

def fib(n) 
    if (0..1) === n 
    return n 
    else 
    return fib(n-1) + fib(n-2) 
    end 
end 
puts fib(5) 
+0

「=」はありません。 – sawa

+0

なぜ===別の方法が必要ですか?なぜ二重平等は働かないのですか? –

+0

'a === b'は' a。===(b) 'の文法的な砂糖です。オブジェクト 'a'は' === 'メソッドを実行しています。数値の '==='メソッドは等価比較です。一方、 '(0..1)'は 'Range'オブジェクトであり、' === 'メソッドは" include "型操作です:http://ruby-doc.org/core-2.2.0 /Range.html#method-i-3D-3D-3D。ドキュメント==================================================================================== '=='は動作しませ – danielrsmith

関連する問題