Лабораторная работа №8

Лабораторная работа №8
Тема: Разработка и отладка алгоритмов и программ с использованием рекурсивных функций

 

Вы не можете скачивать файлы с нашего сервера


Цель работы : Приобретение навыков работы с функциями.
Оснащение: IBM PC, Borland C++ 5.02

Краткие теоретические сведения:

Функции – это блоки языка программирования, самостоятельные единицы программы, спроектированные для решения конкретных задач, обычно повторяющиеся несколько раз.

Основная форма описания функции имеет вид:
тип имя_функции (список_параметров)
{
тело_функции
}

Функция, которая вызывает сама себя, называется рекурсивной. Простейший пример рекурсивной функции это вычисление факториала:

Пример 8.1. 
z = x2 + y2 .

Вариант 1 (без прототипа)
# include<stdio.h>

int fact(int n); // прототип функции

main()
{
  int a, f;  

  printf("Введите a: ");
  scanf("%d", &a);

  f=fact(a);
  printf("факториал числа %d равен %d", a, f);

  return 0;  
}

int fact(int n)
{  
  if (n==0) return 1; // необходимо задать начальное значение
  else return n*fact(n-1); // рекурсивный вызов
}  

Вначале кода программы функцию необходимо объявить, используя прототип функции.

Задания

1. Описать рекурсивную функцию PowerN вещественного типа, находящую значение n-й степени числа x по формуле: x0=1, xn = x*xn-1, при n>0; xn = 1/x-n, при n<0. При x<0 вывести сообщение об ошибке, n – целое
С помощью этой функции посчитайте степень при пяти различных значениях n

2. Описать функцию SqrtK вещественного типа, находящую приближённое значение корня k-й степени из числа x по формуле: y(0) = 1, , где y(n) означает Sqrt(x, k, n), x>0, k>1, n>1
с помощью этой функции посчитайте значение корня при шести различных значениях n

3.Описать рекурсивную функцию Fib(N) целого типа, вычисляющую N-е число Фибоначчи F(N) по формуле:
F(1) = F(2) = 1, F(k) = F(k-2) + F(k-1), где k = 3, 4, ... посчитайте количество рекурсивных вызовов, потребовавшихся для нахождения числа Фибоначчи

4. Описать рекурсивную функцию целого типа, находящую число сочетаний из n элементов по m, используя формулу:
C(0, n) = C(n, n) = 1, C(m, n) = C(m, n-1) + C(m-1, n-1), 0<m<n, m,n – целые
посчитайте количество рекурсивных вызовов, потребовавшихся для нахождения С(m, n)

5. Описать рекурсивную функцию NOD(A, B) целого типа, находящую наибольший общий делитель двух натуральных чисел A и B, используя алгоритм Евклида
NOD(A, B) = NOD(B mod A, A), если A<>0, NOD(0, B) = B.

6. Описать рекурсивную функцию Fact2(N) целого типа, вычисляющую значение двойного факториала:
 N!! = 1•3•5•...•N, если N – нечётное,
 N!! = 2•4•6•...•N, если N – чётное. (N>0 целое). 
При N<=0 вывести сообщение об ошибке

7. Описать рекурсивную функцию Fi(n), вычисляющую «Золотое сечение» по формуле: , φ(0)=1, n – количество делений



Обсудить на форуме

Комментарии к статье:

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Регистрация

Реклама

Последние комментарии