Учебная версия на русском. Код и его вывод сохранены в исходном виде.
Прототипы и рекурсия в C
Объявляйте функции до вызова и изменяйте внешние данные через действительные указатели.

Прототип определяет возвращаемый тип и параметры; определение должно ему соответствовать. Аргументы копируются, поэтому изменение обычного параметра не меняет переменную вызывающей функции.
Чтобы обменять значения вызывающего кода, передайте их адреса и выполните запись через указатели. Эту технику иногда называют передачей по ссылке, но сам язык по-прежнему передаёт значение указателя.
В рекурсивном алгоритме сначала определите базовый случай и убедитесь, что каждый вызов уменьшает задачу. Проверяйте небольшие входные данные и учитывайте расход стека.
Код C
#include <stdio.h>
#include <stdlib.h>
// Function prototypes
unsigned long long factorial(unsigned int n);
void swap(int *a, int *b);
int add(int x, int y);
int main(void) {
int a = 15, b = 30;
printf("1. Sum function: %d + %d = %d\n", a, b, add(a, b));
printf("\n2. Pass-by-Reference Swap:\n");
printf(" Before swap: a = %d, b = %d\n", a, b);
swap(&a, &b);
printf(" After swap: a = %d, b = %d\n", a, b);
printf("\n3. Recursive Factorials:\n");
for (unsigned int i = 0; i <= 6; i++) {
printf(" %u! = %llu\n", i, factorial(i));
}
return EXIT_SUCCESS;
}
int add(int x, int y) {
return x + y;
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// Recursive factorial with base case
unsigned long long factorial(unsigned int n) {
if (n <= 1) {
return 1; // Base case
}
return (unsigned long long)n * factorial(n - 1); // Recursive step
}Открыть в компилятореОжидаемый вывод
1. Sum function: 15 + 30 = 45 2. Pass-by-Reference Swap: Before swap: a = 15, b = 30 After swap: a = 30, b = 15 3. Recursive Factorials: 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720
Частые вопросы
Почему код и вывод остаются на английском?
Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.