Эта программа показывает ошибку сегментации, я думаю, что происходит бесконечная рекурсия. Можете ли вы предложить мне исправление - PullRequest
0 голосов
/ 08 января 2011
#include <stdio.h>
int f(int n)
{
  if(n <= 1)
    return 1;
  if(n%2 == 0)
    return f(n/2);
  return f((n-1)/2) + f((n-1)/2+1);
}

/*To test above function */
int main()
{
  int a = 11;
  printf("%d", f(11));
  getchar();
  return 0;
}

Ответы [ 3 ]

1 голос
/ 08 января 2011

Этот код компилируется и прекрасно работает для меня.Результат 5. Вы пробовали ключевое слово explicit, чтобы увидеть, является ли это недостатком оптимизации?РЕДАКТИРОВАТЬ: Если проблема getchar() проблема может быть вашей операционной системы во время выполнения или вашей библиотеки во время компиляции.Это чистая компиляция?Какой компилятор вы используете?

1 голос
/ 08 января 2011

Почему бы просто не отследить его в отладчике и не увидеть, что не так?

0 голосов
/ 08 января 2011

В этой программе нет ничего плохого, она не дает мне никакого вида бесконечного цикла или ошибки сегмента (и так как у вас есть условие <= 1, программа точно не вылетит).Что-то говорит мне, что ваша машина по какой-то причине неисправна ... может быть, нехватка памяти или конфликтующие программы?Или даже компилятор бесится?(это уже случилось со мной).Попробуйте запустить код на другом компьютере, если это возможно, и выясните, дает ли он ошибку seg или нет </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...