Так как это рекурсивная функция, вы должны поместить тест, чтобы убедиться, что length != 0
в самом начале функции, чтобы вы не циклически проходили весь цикл, обращаясь к памяти, к которой не следует обращаться(потому что в этот момент command
указывает на конец сегмента памяти, и вы бы выполнили такие операции, как присвоение значения sum
из значения того, на что указывает command
).
Во-вторых, я нигде не вижу, почему ваша функция должна иметь тип возврата int
.Кажется, что void
будет работать отлично, так как вы ничего не возвращаете из функции (то есть, если вы в конце, вы просто печатаете «NONE» и возвращаете без какого-либо возвращаемого значения, так что в этом нет необходимости).чтобы тип возвращаемого значения был int
... он должен быть void
).
Итак, поскольку вы ничего не возвращаете (т.е. void
), первая строка в вашей функции передВы делаете все остальное, должно выглядеть примерно так:
if (length == 0)
{
printf("NONE\n");
return;
}
Таким образом, вы ловите, где вам нужно остановить рекурсивные вызовы.Тогда последняя строка вашей функции может быть (вы можете опустить «возврат» перед рекурсивным вызовом функции, так как вы возвращаете void
):
Addition(command+1, target, length-1);
Наконец, я полагаю, что вы печатаете всеэти повторяющиеся значения, потому что вы неправильно увеличиваете массив command
(он кажется слишком сложным).Вам просто необходим один цикл for или while, где вы сопоставляете первую переменную в command
с остальными значениями и проверяете, соответствуют ли их суммы цели.
I'm Я сделал рабочую копию вашей функции на ideone , чтобы вы могли проверить, о чем я говорю, особенно об упрощении цикла.
Надеюсь, это поможет,
Джейсон