
- •«Рекурсивные алгоритмы» Содержание:
- •Теоретическое введение:
- •Тексты программ с комментариями;
- •Результаты выполнения программ. Теоретическое введение.
- •Задача поиска максимума.
- •Задача рисования меток на линейке.
- •Задача о Ханойских башнях.
- •Переместить верхние n-1 диск со столбика a на столбик b, используя столбик c как вспомогательный.
- •Переместить оставшийся нижний диск со столбика a на столбик c.
- •Переместить n-1 диск со столбика b на столбик c, используя столбик a как вспомогательный.
- •Тексты программ с комментариями.
- •Int Maximum(int a[10], int l, int r)//заголовок ф-ии
- •Результаты выполнения программ.
Тексты программ с комментариями.
Программа 1 (Поиск максимума) (Имя файла: maxelem.cpp) :
-------------------------------------------------------------------------------------------------------
//*******************************************************
//Подключаемые заголовочные файлы
#include <stdio.h> //стандартный ввод-вывод
#include <conio.h>//для ф-ии getch() и т. д.
#include <ctype.h>//для ф-ии isdigit()
#include <string.h>//работа со строками
#include <stdlib.h>//стандартная библиотека (для ф-ии //atoi(),exit(1))
//*******************************************************
//Основная функция main()
void main()
{
int arr[10];//объявление массива из 10 элементов
int Error(int);//прототип ф-ии проверки на //введенные значения
int Maximum(int [10], int, int);//прототип //рекурсивной ф-ии поиска max
int n;//число элементов массива
int i,max;//счетчик цикла, максимальный эл-т
textcolor(15);//задать ярко-белый цвет шрифта
while(1)//цикл проверки введенного n в диапазоне
{
n=Error(0);// вызов ф-ии запроса и прис-е рез-та
if (n>=1 && n<=10) break; // диапазон
}
for (i=1;i<=n;i++)//цикл заполнения массива с //помощью ф-ии Error()
{
arr[i-1]=Error(i);
}
max=Maximum(arr,0,n-1);//вызов рекурсивной ф-ии и //присвоение рез-та
clrscr();//очистка экрана
//вывод рез-та на экран
printf("\nМаксимальный элемент: %d",max);
printf("\nPress any key for quit\n");
getch(); //задержка
clrscr();//очистка экрана
return;//возврат из ф-ии
}
//*******************************************************
//ф-ия запроса и проверки (защита от неверных нажатий)
int Error(int k)//заголовок ф-ии
{//k-ключ, по значению которого печатается та или иная //строка на экран
int i;//счетчик цикла
char str[6]; //вводимая строка
int str_int[6]; //массив из 6 целых значений
clrscr();//очистка экрана
// печать строки на экран
if (k==0) printf("\n\t\tВведите количество элементов массива (1-10): ");
if (k!=0)
{// печать строк на экран
printf("\n\t\tНеверно введенное значение заменяется на 0!");
printf("\n\t\tВведите %d-й элемент массива(-32000...32000): ",k);
}
gets(str);//ф-ия ввода строки с клавиатуры
i=1;
while (i<=strlen(str))//цикл преобразования кодов символов из char в int,
{ //а также анализ на код не цифры
if (str[i-1]=='-') {i++; continue;}//если первым //стоит знак '-', то не анализировать его
str_int[i-1]=(int)str[i-1];//в эл-ты массива //str_int поместить преобразованные в тип int коды //введенных символов
if (isdigit(str_int[i-1])==0) return 0;//выйти из //ф-ии с передачей 0, если это код не цифры
i++;
}
return atoi(str);//ф-ия преобразования введенной //строки в целое число типа int, а также возвращение //этого рез-та в главную ф-ию main()
}
//*******************************************************
//рекурсивная ф-ия поиска максимума