Вычислить n-ый член последовательности, заданной рекуррентной формулой (рекурсия/итерация) - Pascal

Узнай цену своей работы

Формулировка задачи:

нужно было написать прогу с рекурсией и без, считающую n-ый член последовательности , которая определяется рекуррентной формулой: a1=1, a2=2, a3=3, a[n+1]=3a[n]+2a[n-3]+a[n-2] В процедуре без рекурсии все нормально, считает правильно, а в процедуре с рекурсией пришет ошибку переполнения стека, помогите найти выход, а то у меня уже нет мыслей даже по этому поводу вот код:

Решение задачи: «Вычислить n-ый член последовательности, заданной рекуррентной формулой (рекурсия/итерация)»

textual
Листинг программы
В смысле вводится ещё, сколько первых элементов равны номеру или что - не очень понятно? Тогда так
uses crt;
var q,n:integer;
    a_bez_r:integer;
    a_s_recurs:integer;
 
function bez_recurs(q,n:integer):integer;
var a:array [0..10] of integer;
    i:integer;
begin
for i:=0 to q do a[i]:=i;
for i:=q+1 to n do
    a[i]:=3*a[i-1]+2*a[i-4]+a[i-3];
bez_recurs:=a[n];
end;
 
function s_recurs(q,n:integer):integer;
begin
if n<=q then s_recurs:=n
        else s_recurs:=3*s_recurs(q,n-1)+2*s_recurs(q,n-4)+s_recurs(q,n-3);
end;

begin
clrscr;
write('q='); readln(q);
write('n='); readln(n);
a_bez_r:=bez_recurs(q,n);
a_s_recurs:=s_recurs(q,n);
writeln(' bez recursii ->',a_bez_r);
writeln(' s recursiey -> ',a_s_recurs);
readln;
end.

Объяснение кода листинга программы

  1. Программа начинается с объявления переменных q, n типа integer и a_bez_r, a_s_recurs типа integer.
  2. Далее объявляется функция bez_recurs, которая принимает два аргумента типа integer q и n. Внутри функции объявляется массив a размером 11 элементов и переменная i типа integer.
  3. В первой части функции заполняется массив a первыми q элементами, равными их индексам.
  4. Во второй части функции заполняются остальные элементы массива a начиная с индекса q+1 и используя рекурсивную формулу a[i] = 3a[i-1] + 2a[i-4] + a[i-3].
  5. В конце функции возвращается значение a[n].
  6. Далее объявляется функция s_recurs, которая также принимает два аргумента типа integer q и n.
  7. Внутри функции происходит рекурсивный вызов функции s_recurs, пока значение n не станет меньше или равным q.
  8. В конце функции возвращается значение n.
  9. В основной части программы происходит ввод значений q и n с помощью функции readln.
  10. Затем вызывается функция bez_recurs с введенными значениями q и n для вычисления значения a_bez_r.
  11. После этого вызывается функция s_recurs с введенными значениями q и n для вычисления значения a_s_recurs.
  12. Значения a_bez_r и a_s_recurs выводятся на экран с помощью функции writeln.
  13. Программа завершается с помощью функции readln.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы