2013-09-23 4 views
0

Должна ли эта программа работать бесконечно, потому что главное вызывается каждый раз? И почему он выводит 0 0 0 0? Я знаю, что это вопрос о нобе, но я не могу это получить. Что такое --i do и каков эффект объявления i как статического?Почему эта программа не работает бесконечно?

int main() 
{ 
    static int i=5; 
    if(--i){ 
     main(); 
     printf("%d ",i); 
    } 
} 
+4

Read: [Значения, полученные в случае рекурсивной функции] (http://stackoverflow.com/questions/17785765/values-obtained-in-case-of-a-recursive-function/17785800#17785800) –

+2

Is ваш вопрос действительно «что означает« -i »?», а не «почему это не бежит бесконечно?»? –

+0

@OliCharlesworth Привет, нет. Я знаю, что означает - i. Я хотел знать, как использовать его, если условия работают? Выполняется ли это до тех пор, пока я не стану 0? – rishiag

ответ

4
  1. static int не повторно инициализируется каждый раз. Таким образом, каждый раз, когда вызывается main(), i является одним ниже.
  2. , когда (--i) равен нулю, рекурсивный цикл завершается.

Таким образом, он начинается с i=5 и вызывает новую копию. У этого есть i=4, который снова вызывает новую копию. Это продолжается до i=0, после чего функция просто завершается. Затем поток управления возвращается в стек вызовов, и каждая копия main печатает i, которая теперь равна 0. 4 копии означают 4 нули.

0

Причина, по которой не работает вечно, потому что в какой-то момент i становится 0 и больше не вызывает основной. Трюк равен static, который ссылается на одно и то же место памяти и, следовательно, уменьшается каждый раз, когда рекурсивно вызывается main.

Смежные вопросы