Определяне на цифри в естествено число - рекурсия и итерация
Под естествено число ще разбираме цяло положително число (1,2,3,...,n). Цифрите в 10-ична бройна система са 0,1,2,3,4,5,6,7,8,9 и също са числа. Алгоритъм за определяне броя и вида цифри в естествено число: въвежда се естествено число; това число се дели целочислено на основата на бройната система - в случая 10; последната (най-дясната) цифра може да бъде определена чрез операцията %, следващата стъпка е целочислено делене на 10 - премахваме последната цифра. Алгоритъмът продължава докато редуцираното число е по-голямо от 0. Всяка програма съдържаща цикличен алгоритъм може да се реализира, както с итерация, така и с рекурсия.
Тук целта е да се представят успоредно двата варианта - с рекурсия и итерация.Задачата е следната:
От клавиатурата се въвежда естествено число N от интервала [1..10001].
Програмата трябва да изведе сумата на всички единици, участващи в изписването на числата от интервала [1..N] при представянето им в 2-ична бройна система.
Пример: 4 Изход: 5
1 – 1
2 - 10
3 – 11
4 – 100
Общият брой на 1-ците е 5.
Кратко описание на алгоритъма брой и вид цифри в двоично число.
Въвежда се естествено число.
Създадени са 2 вложени цикъла. Външният обхожда всички числа от интервала. Вътрешният брой всички единици на поредното число, чрез проверка на най-дясната цифра. След като е проверена тази цифра се изтрива.
В езика C/C++ има възможност да се работи директно с разрядите на въведеното число:
а) i & 1;//операция AND
дали въведеното число е четно или нечетно, дали последна цифра на това число в 2-ично представяне е 0 или 1
б) i=i>>1;//всички разряди се премества с 1 позиция надясно, т.е. маха се най-десния разряд, най-дясната цифра на въведеното число.
Същият резултат може да се постигне и чрез целочислено делене на 2 и проверка на целочисления остатък. Този подход е приложен във функцията redica2.
Реализацията на алгоритъма е в 3 варианта: чрез вложен цикъл (redica2), чрез 2 отделни цикъла (redica и chislo) и чрез съставна рекурсия (redica1 и chislo1).
За по-голяма яснота при съпоставяне рекурсия итерация освен една функция с вложен цикъл са реализирани две отделни функции.
Следващата примерна програма реализира решена задача за извеждане на всички цифри в естествено число чрез итерация.
Описаните програми илюстрират идеята, че рекурсия и итерация са алтернативни подходи при решаване на широк кръг задачи. Изборът рекурсия или итерация трябва да бъде обвързан с конкретния проблем, а не да бъде самоцел.
Когато казваме, че една програма е рекурсивна се разбира, че тя съдържа в себе си поне една рекурсивна функция. Можете да разгледате множество програми съдържащи рекурсивна функция и в следните страници:
алгоритъм на Евклид за намиране най-голям общ делител
естествено число - римски цифри, палиндром
триъгълник от знаци
търсене на минимална стойност в редица
бързо сортиране - метод на Хоор
програма за извеждане на Питагорова тройка числа
програма за изчисляване на верижна дроб
диаметър на множество
Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.