2010-11-09 41 views
0

我在這裏有我的尾巴遞歸在Ruby中的斐波那契問題。Ruby中的尾遞歸斐波那契 - 單元測試錯誤

當我運行我的代碼時,我總是有這個錯誤。我在哪裏做錯了?

1) Error: 
test_fibo_rek(Test_fibo_rek): 
ArgumentError: wrong number of arguments (1 for 3) 
    /Test_Fibonacci.rb:14:in `test_fibo_rek' 

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips 

def fibo(n) 
    check_pre(
    nat?(n)) 
    fibo_rek(n,0,1) 
end 

def fibo_rek(n,fibo1,fibo2) 
    if n == 0 
    return fibo1 
    else 
    fibo_rek(n-1,fibo2,fibo1 + fibo2) 
    end 
end 

class Test_fibo_rek < Test::Unit::TestCase 
    def test_fibo_rek 

    assert_equal(0,fibo_rek(0)) 
    assert_equal(13,fibo_rek(7)) 


    assert_raise(RuntimeError) {fibo_rek('10')} 
    assert_raise(RuntimeError) {fibo_rek(-5)} 
    end 
end 
+0

請修復您問題中的代碼格式。 – 2010-11-09 18:39:54

回答

3

在你斷言你打電話fib_rek(0)等即使fib_rek接受3個參數,而不是1

你的意思是叫fib(0) - FIB是隻有一個參數的人。

+0

非常感謝。我認爲我的def fibo_rek(n,fibo1,fibo2)方法仍然是錯誤的。是不是? – KoKo 2010-11-09 19:33:38

+0

@KoKo:不,你的'fib_rek'方法是正確的。 – sepp2k 2010-11-09 19:43:46

+0

@KoKo:但是請注意,ruby並不會優化尾遞歸,除非您專門將其作爲編譯標誌使用(並且僅在1.9版本中)。 – sepp2k 2010-11-09 19:45:44