2017-02-16 5 views
-1

Я написал функцию для поиска двоичного значения целого числа.Бесконечный цикл while при вычислении двоичного кода

int binary(int n) 
{ 

if(n>0) 
{ 
    int x=n%2; 
    binary(n/2); 
    printf("%d",x); 
} 
} 

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

int binary(int n) 
{ 

while(n>0) 
{ 
    int x=n%2; 
    binary(n/2); 
    printf("%d",x); 
} 
} 

Почему это происходит?

+0

классический условный вопрос о постановке цикла. :) –

+5

Потому что вы никогда не обновляете 'n'. –

+2

Дон, т рекурсия с внешней петлей, не имеет смысла. –

ответ

1

Каждый раз, когда вы вызываете двоичную рекурсивную функцию, вы отправляете новое значение, которое равнораз меньше предыдущего. В какой-то момент это значение достигнет 0, а n>0 будет ложным, поэтому вы не попадете в цикл, и вы вернетесь из последней рекурсивной функции. Поскольку вы не изменили значение n, когда вы снова вызвали функцию, n все еще имеет значение 1, и с этого момента его никогда не будет изменено. 1 всегда больше 0, поэтому вы будете стеком в бесконечный цикл.