#include <stdio.h>

int mult(int n, int m) {
	if (m == 0) return 0;
	return n + mult(n, m - 1);
}
int add(int n, int m) {
	if (n == 0) return m;
	return 1 + add(n - 1, m);
}
int bino(int n, int m) {
	if (n == 0 || m == 0) return 1;
	return bino(n - 1, m - 1) + bino(n, m - 1);
}
void printString(char str[]) {
	if (*str) {
		printString(str + 1);	// exchanging these two lines
		putchar(*str);		// will print the string forward.
	}
}
void printArray(int arr[], int n) {
	if (n) {
		printf("%d ", *arr);
		printArray(arr + 1, n - 1);
	} else
		printf("\n");
}
void copyArray(int *dst, int *src, int n) {
	if (n > 0) {
		*dst = *src;
		copyArray(dst + 1, src + 1, n - 1);
	}
}
int main() {
	printf("%d\n", mult(10, 20));
	printf("%d\n", add(10, 20));
	printf("%d\n", bino(10, 20));

	char str[] = "Recursive array printing\n";
	printString(str);

	int src[] = {1, 2, 4, 8, 16, 32};
	int srcsize = sizeof(src) / sizeof(*src);
	int dst[srcsize];

	copyArray(dst, src, srcsize);
	printArray(dst, srcsize);

	return 0;
}
