Моя функция:
int podchcnt(int arr[])
{
int res;
for (int j=1;j<=n;j++)
{
if (arr[j]==1)
{
res+=1;
res+=podchcnt(arr[j]);
}
}
return res;
}
Компилятор выдает ошибку:
invalid conversion from 'int' to 'int*' [-fpermissive]
Почему? Я целочисленной переменной присваиваю целочисленное значение функции. В аргументах у функции указан одномерный массив, в рекурсивном вызове передаю одномерный массив.
Полный код: http://pastebin.com/xW8sQiXC. Задан орграф таблицей смежности. Программа должна выдавать количество потомков каждой вершины начиная с первой.
Я, конечно, не специалист в C++, но по-моему вы здесь res+=podchcnt(arr[j]);
передаете не массив, а элемент массива (т.е. тип int вместо int[]). Отсюда и ошибка, которая говорит, что нельзя преобразовать int в int[].
Смотрите сами - у вас объявлено
int podchcnt(int arr[])
т.е. что функция podchcnt
принимает массив, иначе говоря, указатель на его первый элемент.
А что вы ей передаете в podchcnt(arr[j])
?
Просто элемент...
Вот такая вот нестыковка и приводит к проблемам.
Не вдавался в задачу, но могу предположить, что вы хотите передать подмассив, начиная с j
-го элемента? Тогда пишите либо arr+j
, либо &arr[j]
.
И еще - напомню, что счет элементов в массиве начинается с нуля, так что вызывает определенные сомнения цикл for (int j=1;j<=n;j++)
, как, впрочем, и прочие циклы в вашем полном тексте.
Еще - у вас использована неинициализированная переменная res
- она не имеет начального значения, в ней может быть, что угодно, так что результат может быть любым :) Инициализируйте ее, объявив как int res = 0;
.
Ваша рекурсия вряд ли будет конечной - только если все arr[j]
не будут единицами - так как в каждом ее вызове будет выполняться один и тот же цикл, без конца делающий одни и те же вызовы. При этом, поскольку вы будете передавать все меньшие участки массива, будет выход за границы массива со всеми (неприятными) последствиями...
Ну и еще - в данном случае это не ошибка, просто получается не совсем... даже слова не подберу. Не совсем красиво, что ли - передавать массив как параметр, а его размер - как глобальную переменную. Передавайте уж оба значения как параметры - тогда функция окажется куда универсальнее. Для рекурсии это тоже важно.
Судя по всему должно быть так:
res+=podchcnt(arr + j);
Так как функция принимает массив (считай указатель), то и передавать надо указатель, а не целое число.
Правда, в данном случае надо не забывать, что из-за рекурсии цикл по остаточной части уже должен быть меньше. Правильнее передавать длину (глобальная n
) вместе с указателем в функцию. Но это уже совсем другая история.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, прошу подсказкиРаботал с длл с абстрактным интерфейсом, содержащей набор функций для моего приложения
Как изменить действие при ON UPDATE/ON DELETE в MySQL? Вот как выглядит таблица сейчас:
Добрый день, хочу сделать простенький текстовый квест, я как понимаю там лучше использовать listview, как в нем сделать чтобы новый textview появлялся...