I tried to do it, technically it works, I'm not 100% sure that it uses a distinct process for each call, can you confirm it?
Code:
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
size_t fibonacci(size_t n)
{
pid_t pid1, pid2;
size_t fib;
int status;
switch (n) {
case 0:
return 0;
case 1:
case 2:
return 1;
default:
break;
}
pid1 = fork();
if (pid1 == 0)
exit(fibonacci(n - 1));
else if (pid1 < 0) {
printf("ERRORE");
exit(EXIT_FAILURE);
}
pid2 = fork();
if (pid2 == 0)
exit(fibonacci(n - 2));
else if (pid2 < 0) {
printf("ERRORE");
exit(EXIT_FAILURE);
}
if (waitpid(pid1, &status, 0) == -1) {
printf("ERRORE");
exit(EXIT_FAILURE);
}
fib = WEXITSTATUS(status);
if (waitpid(pid2, &status, 0) == -1) {
printf("ERRORE");
exit(EXIT_FAILURE);
}
return fib + WEXITSTATUS(status);
}
int main(int argc, char *argv[])
{
int a = atoi(argv[1]);
printf("Calcolo fibonacci di %d \n", a);
printf("L' %so numero di Fibonacci e' %d.\n", argv[1], fibonacci(a));
}