Я дал три операции на целое число:
A - добавьте 3 номер
B - удваивает количество
C - свопы две последние цифры номера
Я должен написать алгоритм, который проверяет, является ли я могу сделать k простое число с использованием операций A, B, C в n шагов. В конце я должен напечатать последовательность операций, которые я использовал для создания k простых чисел. Давайте предположим, что мы имеем функцию:Алгоритм с использованием рекурсии
bool ifprime(int n);
Функция ifprime
возвращает истинное, когда число является простым и возвращать ложь, когда это не так.
Код:
bool is_possible(int k, int n, int a)
{
if(ifprime(k))
{
return true;
}
if(n==0)
{
return false;
}
switch(a)
{
case 1:
k = A(k); // perform operation A
break;
case 2:
k=B(k); //perform operation B
break;
case 3:
k=C(k); //perform operation C
break;
}
return is_possible(k,n-1,1)||is_possible(k,n-1,2)||is_possible(k,n-1,3);
}
Моя проблема заключается в том, что я не знаю, как запомнили правильный путь, а затем распечатать его.
в то время, когда вы обнаружили положительный результат печати сообщение после каждого рекурсивного вызова, если возвращаемое значение является «истинным», печатает сообщение. после отладки заменить «распечатать сообщение» соответствующим шагом вывода – bobah
Возможно, вы имели в виду «print message» 'if (ifprime (k)) {cout << a; return true;} «Я действительно не понимаю. Когда я печатаю сообщение после обнаружения, я не смогу распечатать все этапы. Я был бы чрезвычайно благодарен, если бы вы могли объяснить мне это еще раз. –
каждый раз, когда ваш 'is_possible()' вот-вот вернет 'true', включая случаи, когда он возвращает значение из рекурсивного вызова самому себе, зарегистрируйте сообщение. – bobah