2010-11-09 56 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