Как создать накопительный код, который выполняется итерацией?

Поскольку, когда вы передаете char* в std::ostream, он печатает строку C-style (т. е.: char, char*), на которую указывает.

Помните, что "hello" a char*.

2
задан Cheryl 23 February 2019 в 16:48
поделиться

1 ответ

def accumulate_iter(combiner, term, a, next, b):
    result = term(a)
    while a <= b:
        a = next(a)
        if a <= b:
            result = combiner(term(a), result)

    return result

print(accumulate_iter(lambda x, y: x * y, lambda x: x * x, 1, lambda x: x + 1, 5))

Вывод:

14400

Вы также можете полностью избавиться от дополнительной итерации цикла, чтобы вам не понадобился дополнительный (x < = y) тест:

def accumulate_iter(combiner, term, a, next, b):
    result = term(a)
    a = next(a)
    while a <= b:
        result = combiner(term(a), result)
        a = next(a)

    return result

Обратите внимание, что эта вторая версия более верна тому, что на самом деле происходит. Цикл «объединяет вещи», что означает, что вам нужно объединить две вещи, но вы выбираете только одну новую вещь на каждой итерации. Поэтому перед циклом естественно иметь особый случай, который касается первого слагаемого и проходит мимо него.

0
ответ дан Steve 23 February 2019 в 16:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: