Как работает рекурсия? - C (СИ)
Формулировка задачи:
Здравствуйте!
Темы указателей и рекурсии оказались очень сложными для самостоятельного изучения. Объясните, пожалуйста, с примерами:
но так не работает, но не понимаю почему.
но работает это:
но тогда получается, что я передаю не указатель, а массив передавать мы не можем, тогда что же я передала?
Буду ОЧЕНЬ БЛАГОДАРНА за помощь!!!
1) как работает рекурсия, и почему функция не зацикливается?
2) как правильно работать с указателями, если их передавать в функцию? я пробовала сделать так:
mix(*parray_a, size_a, *parray_b, size_b, *parray_c, g, j, index); //нужно из массивов А[size_a] и Б[size_b] сделать массив С[size_a+size_b]
mix(array_a, size_a, array_b, size_b, array_c, g, j, index);
Решение задачи: «Как работает рекурсия?»
textual
Листинг программы
int factr(int n) {
int answer;
if(n==1) return(1);
answer = factr(n-1)*n; /* рекурсивный вызов */
return(answer);
}
/* неркурсивная функция */
int fact(int n) {
int t, answer;
answer = 1;
for(t=1; t<=n; t++)
answer=answer*(t);
return(answer);
}
Объяснение кода листинга программы
- В функции factr(int n) определена переменная типа int с именем answer.
- Если значение переменной n равно 1, то возвращается 1.
- Иначе, происходит рекурсивный вызов функции factr с аргументом n-1, и результат этого вызова умножается на значение переменной n.
- Возвращается полученный результат.
- В функции fact(int n) определены три переменные типа int: t, answer и answer.
- Переменная answer инициализируется значением 1.
- В цикле for переменной t присваиваются значения от 1 до n.
- На каждой итерации цикла значение переменной answer умножается на текущее значение переменной t.
- По завершении цикла возвращается полученное значение переменной answer.