Разработать рекурсивную функцию, которая вычисляет значение следующего выражения - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д