Новый учебный год, старый вавилонский метод.
Итак, я не разрешу это для вас, но я могу вас начать.
Мы можем написать небольшую функцию, которая вычисляет каждый x_{k+1}
:
def sqrt_step(n, xk):
return 1/2.0 * (xk + float(n)/xk)
Зададим n = 100
.
sqrt_step(100, 1) # returns 50.5
Теперь давайте кормить это число в функцию еще несколько раз:
sqrt_step(100, 50.5) # 26.2
sqrt_step(100, 26.2) # 15.0
sqrt_step(100, 15.0) # 10.8
... это сходится к 10, как k
уходит в бесконечность.
Теперь, если бы существовал способ повторной операции снова и снова k
раз ... Я думаю о трехбуквенном слове, которое начинается с «f» и рифм с «рудой» ...
EDIT
Вы сделали честные усилия, чтобы решить эту проблему - что я собираюсь предположить это домашнее задание практика упражнения и не задание.
Вы можете решить это просто с помощью функции sqrt_step
внутри новой функции. Это может быть сделано следующим образом:
def square_root(n, k):
xk = 1
for i in range(k):
xk = sqrt_step(n, xk) # or just: xk = 1/2.0 * (xk + float(n)/xk)
return xk
Тесты:
square_root(64, 100) # 8.0
square_root(144, 100) # 12.0
Как вы стали более продвинутые, вы узнаете о функциональных методов программирования, которые позволяют избежать перезаписи переменных и явно писать for
петли. На данный момент, однако, это самый простой подход.
В соответствии с общими рекомендациями по домашнему заданию (http://meta.stackexchange.com/a/10812), вы предлагаете ** добросовестную попытку самостоятельно решить проблему ** и опубликовать это в вашем вопросе. – ahoffner