Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Прототипы и рекурсия в C

Объявляйте функции до вызова и изменяйте внешние данные через действительные указатели.

Открыть в компиляторе

Прототипы и рекурсия в 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

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.