Форум » Рекурсивные процедуры и функции » Вопрос по №79 » Ответить

Вопрос по №79

cabanov.alexey: Получаю 690, а в ответах 852 Мой код: [pre2] def f(n): if n<=5: return n elif n%3==0: return n+f(n/3+1) else: return 0 for i in range(1,1000): x = f(i) if x>1000: print(i, f(i))[/pre2]

Ответов - 4

Поляков: cabanov.alexey пишет: return 0 Это почему так? Один из вариантов решения здесь.

cabanov.alexey: Ошибку осознал, спасибо! [pre2] def F(n): if n <= 5: return n if n % 3 == 0: fn = F(n//3 + 1) return n + fn if fn!=0 else 0 else: return 0 n = 1 while True: r = F(n) if r != None and r > 1000: print(n, r) break n += 1 [/pre2]

konyashkind: Осмелюсь предложить еще такой вариант решения [pre2] def f(n): if n<=5: return n elif n%3==0: return n+f(n/3+1) else: return n+f(n+3) n=0 k=0 while n<1000 and k<1000: n=n+1 nt=n st=0 tr=0 while nt>12 and st==0: if (nt/3+1)%3==0: nt=int(nt/3+1) else: st=1 if st==0: k=f(n) print(k, n) [/pre2]


konyashkind: А вот такой вариант предложил один из учеников. Учитывая, что вторая ветвь рекурсии нам не нужна, т.к. она не дает решения, заменяем ее на отрицательное число, для того чтобы цикл не прервался. [pre2] def f(n): if n<=5: return n elif n%3==0: return n+f(n/3+1) else: return -5000000000 x=0 while f(x)<=1000: x=x+1 print(x, f(x)) [/pre2]



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