Я на форуме не очень давно, но заметил, что есть группа людей, которые либо начали учить ЯП, либо только собираются сделать это, и не знают, с чего начать и чем заниматься. Недавно я открыл для себя такой сайтец как: CodeWars. Сайт будет полезен тем, кто знает основы языка, но не знают что именно делать и как развиваться. На сайте можно найти очень много задач, решая которые можно самостоятельно поднимать свой уровень владения языком программирования. Также, не стоит забывать, что каждая задачка уникальна, и надо к каждой придумать подходящий алгоритм решения(а как мы помним, умение создавать рабочие алгоритмы намного важнее, чем написание кода). Также, после решения задачки вам будет доступно посмотреть решение других пользователей - очень важный аспект, так как то, что ты делаешь в 5-10 строчек кода, другие сделали в 1 строчку, что сильно мотивирует находить наилучший способ решения задачи. Сегодня мне попалась очень интересная задачка: Задачка In this kata, you must create a digital root function. A digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of n. If that value has more than one digit, continue reducing in this way until a single-digit number is produced. This is only applicable to the natural numbers. На русском: В этом ката вы должны создать функцию цифрового корня. Цифровой корень - это рекурсивная сумма всех цифр в числе. Учитывая n, возьмите сумму цифр n. Если это значение содержит более одной цифры, продолжайте сокращать таким образом, пока не будет получено однозначное число. Это применимо только к натуральным числам. Решение Первое, что пришло в голову - это конечно же узнать сумму всех чисел переменной. Алгоритм решения: 1. Создаем While цикл, в котором ставим условие, чтобы заданное число было больше 0 2. Берем остаток деления переменной на 10 и складываем в новую переменную, в которой и будем сохранять сумму. 3. Делим переменную на 10. Данный алгоритм решает частично задачку. Используя его, мы высчитываем сумму чисел переменной, но в задачке сказано, что необходимо, чтобы конечная сумма была однозначным числом. Немножко подумав, было принято решение использовать для решения рекурсию. Алгоритм был таким: 1. Используем первый алгоритм 2. Добавляем проверку при помощи оператора IF, при помощи которого мы будем проверять, если переменная сумма - однозначное число. В случае правды - мы возвращаем значение. В случае неправды - заново вызываем свою функцию. Код public class Number { public int DigitalRoot(long n) { long value=0; while(n>0) { value = value + n%10; n = n/10; } if((value/10)!=0) return DigitalRoot(value); else return (int)value; } } Код public class Number { public int DigitalRoot(long n) { long value=0; while(n>0) { value = value + n%10; n = n/10; } if((value/10)!=0) return DigitalRoot(value); else return (int)value; } } Ссылка на задание: https://www.codewars.com/kata/541c8630095125aba6000c00