Я пишу программу, которая решает систему линейных уравнений воздуха. Мне нужно запустить несколько итераций, чтобы увидеть улучшение моей объективной ценности. Сначала я написал программу с записью функций печати внизу файла. Поэтому я в основном делал итерации сам. Теперь я хочу записать количество итераций в качестве входного аргумента для функции.
Я пробовал работать с циклами 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, я получаю «Нет» обратно ... Может ли кто-нибудь объяснить, почему это происходит, и помочь мне исправить мою программу? Спасибо!
Предпочитайте простой цикл рекурсии; for _ in range(iter): A, x, c = A/2, x/2, c/2; return x
.
Возможный дубликат Почему моя рекурсивная функция Python возвращает None?
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.
Распространенная ошибка - вы не возвращаете результат рекурсивного вызова.