Написати рекурсивну і нерекурсівние функцію,
яка приймає позитивний цілочисельний аргумент
і повертає цифровий корінь цього числа. цифровий
корінь числа обчислюється таким чином.
Складаються всі цифри числа, потім все цифри
знайденої суми і т.д. Процес повторюється до тих пір,
поки в результаті що не отримано однозначне число
(Цифра), яке і є цифровим коренем.
Почнемо з нерекурсівние варіанту.
Весь вихідний код такий:
в функції main все досить просто: спочатку встановлюється російська локаль (setlocale (LC_ALL, «Russian»);), потім користувачеві видається запрошення ввести число і це число зчитується в змінну n цілого типу. Після цього друкується результат роботи функції int RootOfNumber (int k).
Розглянемо її докладніше.
У неї передається ціле число і поки воно містить більше 1 знака (умова k> 9) виконується виклик функції для формування чисел всередині числа. Викликається вона з різними аргументами. У мене це k. На кожному витку циклу це число зменшується, і рано чи пізно воно стане менше 10. Тоді функція поверне значення.
І остання функція, яка просто обчислює суму цифр усередині числа:
Приймає ціле число N. І поки N не стане рівним нулю ділить це число на 10 (підстава системи числення) і додає залишок від ділення до суми, після чого ділить N на 10 ще раз, але в цей раз вже записувати не залишок від ділення, а цілу частину. Так як відбувається округлення, то рано чи пізно це число стане рівним нулю.
Рекурсивний варіант тієї ж функції:
Фішка рекурсивних функцій в тому, що вона викликає сама себе всередині себе. У цьому коді немає додаткової функції, яка вважала б суму, але код міститься всередині. Тобто спочатку на функцію подається число, для якого добре б порахувати корінь, далі для цього числа вважається сума його чисел і перевіряється умова виходу з рекурсії - чи є число однозначним, тобто менше 10. Якщо так, то виходимо з рекурсії і повертаємо число, інакше - викликаємо ще раз цю ж функцію, але вже з новою сумою.
Previous Article Переклад: Розробка вашого першого Metrostyle-додаток використовуючи C ++, C # або Visual Basic.Net
Next Article С ++: Шифр Цезаря