#include <cstdio>

// f возвращает int и получает два числа типа int
int f( int a, int b ) { 
	if (a == 0)
		return -1; // выйти из функции и вернуть ответ -1
	if (b == 0)
		return -1;
	return a + b;
}

// процедура = функция, которая ничего не возвращает (ничего = void)
void draw( int n ) { 
	for (int i = 0; i < n; i++)
		printf("-");
	puts(""); // printf("\n");
}

// рекурсия
int fib( int n ) {
	if (n <= 1)
		return 1;
	return fib(n - 1) + fib(n - 2);
		
}

// параметры по ссылке, result связана с переменной из внешнего мира
void factorial( int n, int &result ) {
	result = 1;
	while (n > 1)
		result *= n--; // сперва использовать n, затем уменьшить на 1
}

int main() {
	int x = 3;
	draw(50);
	printf("%d\n", f(0, 2 + 1)); // в параметры можно передавать числа, выражения
	draw(50);
	printf("%d\n", f(x, x * x + 2)); 
	draw(50);
	printf("%d\n", fib(40)); // долго...
	
	factorial(10, x); // сохранили в x число n!
	printf("%d\n", x);
	return 0;
}