Разработать рекурсивную функцию, которая вычисляет значение следующего выражения - C (СИ)
Формулировка задачи:
Разработать рекурсивную функцию, которая вычисляет значение следующего выражения:
d(1)=0; d(2)=1; d(n)=(n-1)*[d(n-1)+d(n-2)]
И на основе разработанной функции найти значение выражения для заданного натурального n.
Решение задачи: «Разработать рекурсивную функцию, которая вычисляет значение следующего выражения»
textual
Листинг программы
#include <stdio.h>
long dBad(int n)
{
if (n <= 2)
return n-1;
else
return (n-1)*(dBad(n-1)+dBad(n-2));
}
long dGood(int n, int c, int p,int k)
{
if (n == k-1)
return c;
else
return dGood(n,(k-1)*(p+c),c,k+1);
}
int main(int argc, char* argv[])
{
int k;
k=12;
printf("k=%d d(k)=%d\n",k,dBad(k));
printf("k=%d d(k)=%d\n",k,dGood(k,1,0,1));
return 0;
}
Объяснение кода листинга программы
- Включаем стандартную библиотеку
- Определяем функцию dBad, которая принимает целочисленный аргумент n и возвращает результат вычисления выражения
- Используем оператор if для проверки условия, если n меньше или равно 2, то возвращаем n-1
- В противном случае, рекурсивно вызываем функцию dBad с аргументами n-1 и n-2, затем умножаем результат на (n-1) и возвращаем полученное значение
- Определяем функцию dGood, которая принимает целочисленные аргументы n, c, p и k, и возвращает результат вычисления выражения
- Используем оператор if для проверки условия, если n равно k-1, то возвращаем c
- В противном случае, рекурсивно вызываем функцию dGood с аргументами n, (k-1)*(p+c), c и k+1
- В функции main определяем целочисленную переменную k и присваиваем ей значение 12
- Вызываем функцию dBad с аргументом k и выводим результат на экран
- Вызываем функцию dGood с аргументами k, 1, 0 и 1, и выводим результат на экран
- Завершаем программу возвратом 0 из функции main