Рекурсивная Фибоначчи с использованием Fork (в C) - PullRequest
6 голосов
/ 06 февраля 2012

Я пытаюсь написать функцию, которая рекурсивно вычисляет результирующее число Фибоначчи из заданного int n, используя вилки в C.

Вот спецификация функции: Если печать верна, распечатайте ее. В противном случае предоставьте это родительскому процессу. Решение должно быть рекурсивным, и оно должно создавать нового дочернего элемента для каждого вызова. Каждый процесс должен вызывать doFib () ровно один раз. Подпись метода не может быть изменена. Вспомогательные функции не могут быть использованы.

Вот что я написал до сих пор, основываясь на моем понимании форка. Я пытаюсь разветвляться дважды, чтобы я мог порождать два дочерних процесса. Один, чтобы сделать FIB (N-1) и один, чтобы сделать FIB (N-2). Таким образом, я могу получить оба результата и объединить их.

* * 1010

Мои вопросы:

1. Как получить оба значения выхода из двух дочерних процессов? Я знаю, как получить один (см. Код), но как мне их обоих захватить?

2. Поскольку doFib не возвращает значение, как я могу получить значение моего вызова doFib в любом из моих дочерних процессов, чтобы я мог объединить их?

3. Я правильно делаю свою вилку? Я был уверен с одной вилкой, от двух у меня болит голова.

Это практическая промежуточная проблема серии, над которой я сейчас работаю, чтобы подготовиться к предстоящему экзамену.

1 Ответ

5 голосов
/ 06 февраля 2012

1) Вызовите waitpid дважды.

2) Вызов waitpid поместит его в status.

3) Две вещи: во-первых, для завершения разветвленного процесса, используйте _exit, а не exit.Функция exit может испортить файловые дескрипторы, которые родитель все еще использует.Это не имеет значения в вашем случае, но зачем учиться вредным привычкам?Во-вторых, вам не нужно предложение else if (pid2 > 0).Это все, что осталось.

...