2014-02-05 3 views
0
def fold2(op, term, a, next, b, base): 
    if a > b: 
     return base 
    else: 
     return op (term(a), fold2(op, term, next(a), next, b, base)) 



def geometric_series(a, r, n): 
    return fold2(lambda x,y: x+y, lambda x: a*(r**(n-1)), 1, lambda n: n+1, n, a) 

Может кто-нибудь помочь мне с этим кодом. Предположим, что нужно дать геометрический ряд, но мне разрешено изменять только часть def geometric_series (a, r, n). Что с этим не так?отладка для геометрических рядов в python

а) geometric_series (1/2, 1/2, 3) = 0,875 (правильный)

б) geometric_series (1, 2, 4) = 33 (неверно) правильный ответ 15

+0

Что не так с этой программой? – thefourtheye

+0

Я добавил в примеры – user3234828

ответ

0

Там это ошибка во второй лямбда код:

lambda x: a*(r**(n-1)) 

Я думаю n и x на самом деле должна быть такой же переменной здесь:

lambda t: a*(r**(t-1)) 

В дополнение к этому я изменил третий аргумент fold2 от 1 до 2, и все работает должным образом.

+0

Спасибо за помощь! : D – user3234828

+0

Если этот ответ верен, отметьте его как таковой ^^ – themantalope

0

Третий аргумент fold2 должен иметь одну и ту же переменную. Либо либо n, либо оба x. Кроме того, Ваш последний аргумент, который является базовым случаем, должно быть 0

0

Просто добавить на, основание должно быть 0, а не, если не для тестирования случае будет дополнительно 1.

Защиту geometric_series (a, r, n): return fold2 (lambda x, y: x + y, lambda n: a * (r ** (n-1)), 1, lambda n: n + 1, n, 0)

Смежные вопросы