2016-05-28 3 views
-1
// Define the recursive function. 
    int collatz(int p1) 
    { 
     // While Loop Starting 
     while (p1>1) 
     { 
     //when the number is even 
     if(p1%2==0) 
     { 
      p1 = p1/2; 
      printf("%d ", p1); 
     //using recursion 
      return collatz(p1); 
     } 
     // Case where number is odd. 
     elseif 
     { 
      p1 = 3*p1+1; 
      //print function 
      printf("%d ", p1); 
      //using recursion 
      return collatz(p1); 
     } 
     } 
    } 
    // Main body. 
    int main() 
    { 
     // Declare the variable and initialized it. 
     int p1= 4; 
     //print function 
    printf("User Entered value : %d\n", p1); 
     // Display the number 
     printf("%d\n", collatz(p1)); 
     //End 
     return 0; 
    } 

Вывод: Я получаю выход как: 2, 1, 1 я не должен получить последний номер 1 repeated.Could, пожалуйста, поправьте меня, где я сделал ошибку. Пожалуйста сделай все необходимое.Коллатца последовательность получения последнего номера 1 повторена

+0

1) C и C++ - разные языки. Выбери один! 2) Это не C или C++. 3) См. [Ask]. – Olaf

+0

Я написал в C – chandu

+0

Итак, почему добавлен тег для другого языка? Измените свой вопрос по двум другим вопросам. – Olaf

ответ

0

Вы должны всегда включать предупреждения при компиляции программы на C или C++. Если бы вы это сделали, компилятор предупредил бы вас, что ваша функция collatz может завершиться без возврата значения. (Что произойдет, если аргумент равен 1?)

Это неопределенное поведение, а также использование возможного несуществующего возвращаемого значения в вашей функции main.

Так что это просто причуда, что это случилось с печатью 1 в главном. Но все, что было напечатано, было бы неправильным, потому что вы, похоже, ожидаете, что результат будет ограничен тем, что напечатано в collatz.

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

+0

Я работаю в среде Linux. Я новичок в программировании на C. Я не знаю об отладке в среде linux на машине vmware. – chandu

+0

@chandu: Да, я подозревал столько же, поэтому я предложил использовать карандаш и бумагу. Но если вы серьезно относитесь к обучению программированию, вам, в конце концов, придется разбираться, как использовать отладчик. – rici

+0

Мне нужно что-то исправить во время цикла. – chandu