Форум » Рекурсивные процедуры и функции » Задача № 5605 (А. Куканова) - ЕГЭ 16 » Ответить

Задача № 5605 (А. Куканова) - ЕГЭ 16

Агеева: Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = sqrt(n), если sqrt(n) – натуральное число, F(n) = F(n + 1) + 1, если sqrt(n) – дробное число. Чему равно значение выражения F(4850) + F(5000)? Подскажите, в чем ошибка в решении? [pre2] [pre]from math import sqrt def f(n): if sqrt(n) > 0 and sqrt(n) == int(): return sqrt(n) if sqrt(n) == float(): return f(n+1)+1 print(int(f(4850)) + int(f(5000)))[/pre] [/pre2] Ошибка в последней строке следующая: TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType' При выведении значений f(4850) и f(5000) выводится результат None.

Ответов - 3

Поляков: Нужно так: [pre2] def f(n): q = round(n**0.5) if q*q == n: return q else: return f(n+1)+1 print(int(f(4850)) + int(f(5000)))[/pre2]

Evgen: При делении натурального числа на 2 мы получаем в остатке или 0, или 1 (чётные и нечётные числа), таким образом проверяем, если корень дает четное или нечётное целое число, то выводим корень этого числа, во всех остальных случаях применяет функцию F(n+1)+1 sqrt(n) запишем как n**0.5, что бы не подключать дополнительный математический модуль из библиотеки [pre]def F(n): if n**0.5%2==0 or n**0.5%2==1: return n**0.5 else: return F(n+1)+1 print(F(4850) + F(5000))[/pre]

Bobov: Можно и так... [pre2] import math def f(n): if n % math.sqrt(n) == 0: return math.sqrt(n) if n % math.sqrt(n) != 0: return f(n + 1) + 1 print(f(4850) + f(5000)) [/pre2]




полная версия страницы