2016-06-27 13 views
1

Hier sind zwei Versionen von Fibonacci dachte ich anZwei Versionen von Fibonacci, null Ausdruck

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) 

Warum die zweite fib (n) arbeiten doesent?

Antwort

2

Es ist, weil n == (0..1) nie erfüllt ist, wenn n eine Zahl ist. Der Bereich 0..1 ist keine Nummer. Ein Minimum fix ist:

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

nicht wahr? Warum funktioniert der erste? –

+0

Ich lösche meine Antwort, wenn sie so sehr beleidigend ist wie Ihr Kommentar. – sawa

+0

Nein, ich bin wirklich verwirrt. Keine Notwendigkeit zu beleidigen –

2

Sie müssen die elsif für else entfernen (da Sie keinen Fall haben), und umgekehrt auch die ===

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

Es gibt kein "the" '==='. – sawa

+0

Warum muss === anders herum sein? Warum funktioniert double equal nicht? –

+0

'a === b' ist nur syntaktischer Zucker für' a. === (b) '. Also hat das Objekt 'a' die' === 'Methode ausgeführt. Die Methode '===' einer Zahl ist ein Gleichheitsvergleich. Auf der anderen Seite ist '(0..1)' ein 'Range' Objekt, und es ist' === 'Methode ist eine Operation vom Typ" include ": http://ruby-doc.org/core-2.2.0 /Range.html #method-i-3D-3D-3D. '==' wird nicht funktionieren, weil die Dokumentation angibt, dass es genau derselbe Bereich sein muss. – danielrsmith

Verwandte Themen