Написание итерационной функции

Я пишу программу, которая решает систему линейных уравнений воздуха. Мне нужно запустить несколько итераций, чтобы увидеть улучшение моей объективной ценности. Сначала я написал программу с записью функций печати внизу файла. Поэтому я в основном делал итерации сам. Теперь я хочу записать количество итераций в качестве входного аргумента для функции.

Я пробовал работать с циклами while и for, но мне это не помогло. Итак, теперь я попробовал формат, как вы можете видеть ниже. Я поместил здесь не всю свою программу, а только основную структуру того, что она делает.

def function(A,x,c,iter):
    if iter == 0:
        return x
    else:
        A = 1/2 * A
        c = 1/2 * c
        x1 = 1/2 * x

        iter = iter - 1

        function(A,x1,c,iter)

Когда у меня iter = 0, это дает мне непосредственное значение x. Но когда iter> 0, я получаю «Нет» обратно ... Может ли кто-нибудь объяснить, почему это происходит, и помочь мне исправить мою программу? Спасибо!

Распространенная ошибка - вы не возвращаете результат рекурсивного вызова.

meowgoesthedog 30.05.2019 16:14

Предпочитайте простой цикл рекурсии; for _ in range(iter): A, x, c = A/2, x/2, c/2; return x.

chepner 30.05.2019 16:17

Возможный дубликат Почему моя рекурсивная функция Python возвращает None?

N Chauhan 30.05.2019 16:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
40
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий
def function(A,x,c,iter):
    if iter == 0:
        return x
    else:
        A = 1/2 * A
        c = 1/2 * c
        x1 = 1/2 * x

        iter = iter - 1

        return function(A,x1,c,iter)

Вы просто не вернули значение else, а функции Python возвращают None, если нет оператора return.

Добавьте return в последнюю строку, чтобы значение возвращалось после выполнения функции: return function(A,x1,c,iter)

В виде цикла for это будет выглядеть так:

def function(A,x,c,iterN):
    for _ in range(iterN)
        A = 1/2 * A
        c = 1/2 * c
        x = 1/2 * x
    return x

Обратите внимание: не используйте iter для именования переменных, так как это встроенная функция Python.

Другие вопросы по теме