місце | Учасник | допис | оцінка |
---|---|---|---|
1️⃣ | @event-horizon | link | 9.8 |
2️⃣ | @ady-was-here | link | 8.3 |
3️⃣ | @josepha | link | 7.9 |
4️⃣ | @mohammadfaisal | link | 7.1 |
@mohammadfaisal & @kouba01 набрали однакову кількість балів - 7.1 , але я включив в четвірку @mohammadfaisal
Решта теж гарно справилися з завданням(якщо не враховувати три завдання, де вони втратили майже 3 бали)
Самим складним виявилося завдання дослідити глибину рекурсії.
Слід було організувати вічну рекурсію, але вічною вона(на відміну від циклу) не буде
На кожен виклик витрачаються ресурси.
void f(void)
{
f();
}
int main()
{
f();
}
Завдання було підрахувати - це можна було зробити так:
Глобальні змінні зло - але тут використаємо її))
int k;
void f(void)
{
k++;
f();
}
int main()
{
f();
}
В Visual Studio програма аварійно зупиниться і покаже значення змінної k.
Іншим варіантом можна було б зробити так, і підібрати граничне значення де програма завершується аварійно
if(k++<100000) f();
Щоб зменшити кількість викликів слід було передати у функцію побільше різних параметрів, всі вони розміщуються на стеку - отже відбирають пам'ять.
Далі я задав два майже однакових завдання, надрукувати числа від 1 до n, та від n до 1. З погляду циклу відмінність лише в i++ та i--. А в рекурсії важливо було помітити що в одному випадку ми друкуємо n ДО виклику, а в іншому випадку ПІСЛЯ виклику функції.
У мене в самого викликало великий подив знайти суму рекурсивно. Це вже я додав вам таку підказку що без прямого використання додавання.
Стосовно ж останнього завдання, яке було дуже схоже за алгоритмом до друку чисел від 1 до n, та від n до 1. Аналогічне воно тим, що ми друкуємо символ, а потім спускаємося в рекурсію. А для оберненого друку спускаємся рекурсію, а потім по поверненню виконуємо друк символа.
Дякую всім за участь, сподіваюся в наступному завдання ви проявите творчість на фантазію також