новичок здесь. Еще новее рекурсии. Я пишу функцию для своей программы на C++, и, как вы сможете сказать, я немного незнаю, когда речь идет о рекурсивных алгоритмах. Я был бы очень признателен, если бы кто-то мог исправить мою функцию, чтобы я мог заставить ее работать и, возможно, лучше подумал о том, как обращаться с рекурсией позже.Простая рекурсивная функция для определения транзитивности двух элементов
Моя функция принимает двумерный квадратный массив булевых чисел и целое число i и целочисленное значение array_size в качестве параметров. Функция возвращает логическое значение.
Массив - матрица смежности, которую я использую для представления набора условных обозначений. Например, если значение в [0] [3] истинно, то 0 -> 3 (если 0, то 3). Если [3] [7] истинно, то 3 -> 7 (если 3, то 7). По транзитивному свойству 0 -> 7 (если 0, то 7).
Целое число i является частным элементом в множестве условных обозначений. Функция вернет true, если этот элемент транзитивно связан с последним элементом массива. Последним элементом в массиве является целое число (array_size - 1),
Целое число array_size - размер каждого измерения квадратного массива. Если array_size равно 20, массив равен 20x20.
Идея этой функции состоит в том, чтобы определить, существует ли какой-либо логический «путь» от первого целочисленного элемента к последнему целочисленному элементу транзитивным свойством. Когда путь существует, функция возвращает true, иначе возвращается false. Рекурсивный вызов должен позволять ему перемещаться по всем возможным путям, возвращая true, как только он наконец достигнет последнего элемента, и false, если все пути не пройдут.
Например, если i = 0 и array_size = 10, тогда функция вернет, действительно ли 0 -> 9 действует в соответствии с условиями, предоставляемыми матрицей и транзитивным свойством.
Это мой код до сих пор:
bool checkTransitivity(bool **relations, int i, int array_size){
bool isTransitive = false;
if (i == array_size - 1)
{
isTransitive = true;
}
else
{
for (int j = i; j < array_size; j++){
if (relations[i][j])
{
isTransitive = checkTransitivity(relations, j, array_size);
}
}
}
return isTransitive;
В настоящее время, функция возвращает истину для всех входных данных.
Любая помощь вообще оценивается. Заранее спасибо!
Вы должны возможно привести пример ввода. Как бы то ни было, код не всегда может вернуть true. – spfrnd