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

16 №70

Шишунов И.В.: Здравствуйте! 1. F(0)=1 2. F(1)=2*F(0)+3*F(0)=5 3. F(2)=2*F(-1)+3*F(1)+2 4. F(-1) = -F(1), подставляем в шаг 3 5. F(2) = -2*F(1)+3*F(1)+2 = F(1)+2 = 7 6. F(3) = F(2)+2=9, F(4)=F(3)+2=11, F(5)=13, F(6)=15, F(7)=17, F(8)=19, F(9)=21, F(10)=23 7. F(20) = 43, F(30) = 63, F(40)=83, F(50)=103 8. 1+0+3 = 4 Ответ на сайте 6. Где ошибка?

Ответов - 5

polyakovss: Шишунов И.В. пишет:2. F(1)=2*F(0)+3*F(0)=5Правильно: F(1)=2*F(0)+3*F(0)+2=7 ... F(50)=105 Ответ: 6. [pre2] def f(n): if n == 0: return 1 if n == 1: return 7 if n > 1: return f(n - 1) + 2 print(f(50)) [/pre2]

Шишунов И.В.: Увидел, спасибо!

abcdefgser: Вроде все правильно, хотел просто потом подсчитать сумму цифр значения, а число не выводится [pre2]function f(n:integer):integer; begin if n = 0 then f := 1 else if n > 0 then f := 2 * f(1 - n) + 3 * f(n - 1) + 2 else if n<0 then f := -f(-n); end; begin write(f(50)); end. [/pre2]


polyakovss: Здравствуйте, abcdefgser! "Число не выводится" потому, что количество рекурсивных вызовов слишком велико. Чтобы исправить ситуацию, нужно проанализировать функцию и переписать ее так:[pre2] function f(n:integer):integer; begin if n = 0 then f := 1; if n = 1 then f := 7; if n > 1 then f := f(n - 1) + 2 ; end; begin write(f(50)); end. [/pre2]Смотрите, например, здесь.

abcdefgser: Спасибо огромное!!



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