Мне дали задание на java, оно включает в себя игру с пасхалкой, которая начинается, когда я даю вам n яиц, и заканчивается, когда у вас остается ровно m яиц. На любом этапе игры, допустим, у вас осталось n яиц, тогда вы можете отдать часть яиц, но вы должны соблюдать следующие правила:
• Если n четно, то вы можете вернуть ровно n/2 яиц.
• Если n делится на 3 или 4, то вы можете умножить две последние цифры n и вернуть это количество яиц.
• Если n делится на 5, то вы можете вернуть ровно m яиц.
• Если n — простое число, то вы можете отдать ровно одно яйцо.
Мне нужно написать функцию picnic, которая вернет true, если, применив правила в некотором порядке, у нас останется ровно m яиц; ложь иначе:
public static boolean picnic(int n, int m) { … }
при этом мои задачи:
а) Предоставьте рекуррентные отношения для пикника (int n, int m)
б) Реализовать рекурсивную функцию в Java, используя рекуррентные отношения
c) Разработать полное рекурсивное дерево вызовов для picnic(250, 42)
г) Какова здесь схема рекурсии? (хвостовая рекурсия или нет? древовидная или линейная рекурсия?)
e) Напоминает ли эта функция какую-либо стратегию построения алгоритма? Если да, то какой?
Я уже сделал вопрос а) с этим в качестве ответа:
public class EasterEggs {
public static boolean picnic (int n, int m) {
if (n == m)
return true;
else return (picnic(n,m));
}
}
И я не уверен, как реализовать рекурсивную функцию. Я пытался несколько раз, но до сих пор ничего.
Вопросы b и c - мои самые большие проблемы, и я уверен, что смогу понять d и e. Может ли кто-нибудь помочь мне с этим? И, возможно, показать мне, как это можно реализовать?