Форум » Рекурсивные процедуры и функции » Задача 16.113 » Ответить

Задача 16.113

ivackov.sergey: Условия: Алгоритм вычисления функции F(n), где n – целое неотрицательное число, задан следующими соотношениями: F(n) = 0 при n = 0 F(n) = F(n/2) – 1 при n > 0 для чётных n F(n) = 3 + F(n–1) при n > 0 для нечётных n Сколько различных значений может принимать функция F(n) для чисел n, меньших 1000? Мое решение: ## function f(n:integer):integer; begin if n = 0 then Result:=0 else begin if (n > 0) and n.IsEven then begin Result:=(n div 2) -1; end; if (n > 0) and n.IsOdd then begin Result:=(n - 1) +3; end; end; end; var L := new SortedSet<integer>; for var i:=1 to 999 do begin L.Add(f(i)); end; L.count.Println; Мой ответ: 751. В ответах: 26?

Ответов - 5

ivackov.sergey: {16.113) Алгоритм вычисления функции F(n), где n – целое неотрицательное число, задан следующими соотношениями: F(n) = 0 при n = 0 F(n) = F(n/2) – 1 при n > 0 для чётных n F(n) = 3 + F(n–1) при n > 0 для нечётных n Сколько различных значений может принимать функция F(n) для чисел n, меньших 1000?} ## function f(n:integer):integer; begin if n <= 0 then Result:=0 else begin if (n > 0) and n.IsEven then begin Result:=f(n div 2) -1; end; if (n > 0) and n.IsOdd then begin Result:=f(n - 1) +3; end; end; end; var L := new SortedSet<integer>; for var i:=1 to 999 do begin L.Add(f(i)); end; L.count.Println;

aln1947: 16.109 F(n) = 0 при n ≤ 2 и n = 8 F(n) = 1 при n = 3 F(n) = F(n–2) + F(n–1) при n > 3 и n  8 Для какого значения n значение F(n) будет равно 25? Сделал программу и т попробовал вставить в нее ответ (F(13)). Не работает! Подскажите, пожалуйста, что может быть не так в программе? [pre2] #16.109 def F( n ): if n <=2 and n ==8: return 0 elif n ==3: return 1 elif n >3 and n!=8: return F(n-1) + F(n-2) print(F(13)) [/pre2]

polyakovss: 16.109 if n <= 2 or n == 8: return 0


aln1947: Вот программа на Питоне: [pre2] def F( n ): if n ==0: return 0 elif n>0 and n%2 ==0: return F(n//2) - 1 elif n >0 and n%2 !=0: return 3+F( n-1) m = set() for i in range (1,1000): r = F(i) m.add(str(r)) print('n = ',len(m)) #Rez = 26 [/pre2]

polyakovss: Вариант решения 16.113: [pre2] def F(n): if n == 0: return 0 if n > 0 and n % 2 == 0: return F(n//2) - 1 if n > 0 and n % 2 != 0: return 3 + F(n-1) print(len(set([F(x) for x in range(1000)])))[/pre2]



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