Member 13238951 Ответов: 3

Как работает доза этой функции: когда n=4;


static void what(int[] x, int n)
{

    if (n == 0)
    {
        for (int i = x.Length - 1; i >= 0; i--)

            Console.Write("{0}", x[i]);
        Console.WriteLine();
    }
    else
    {
        x[n - 1] = 0;
        what(x, n - 1);
        x[n - 1] = 1;
        what(x, n - 1);
    }
}


Что я уже пробовал:

выходными данными являются
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

я просто хочу знать, откуда они у нас

PIEBALDconsult

Он работает рекурсивно.

3 Ответов

Рейтинг:
0

RickZeeland

Ознакомиться с этими статьями:
[рекурсия dotnetperls]
[Рекурсивные методы в Csharp]


Рейтинг:
0

Patrice T

Цитата:
Как работает эта функция: когда n=4;
Это рекурсивно, функция вызывает саму себя.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя-отладчик. Освоение отладчика не является обязательным, оно обязательно для любого программиста, без исключения.
Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


0x01AA

хорошо, 5. Даже это очень общий ответ, но он подходит :-)

Patrice T

Спасибо.

Рейтинг:
0

George Swan

Вы можете визуализировать это как серию обратных вызовов. Ваш метод делает 2 рекурсивных вызова. Эти вызовы, в свою очередь, делают 2 рекурсивных вызова. Таким образом, вы можете визуализировать его как метод whatA, вызывающий методы whatAA и whatAB. Затем метод WhatAA вызывает метод whatAAA и whatAAB и т. д. Сделайте что-нибудь вроде этого


whatA(2)
  n=2, arr[1]=0
  what AA(1)        //stack push A
   {
    n=1, arr[0]=0
      what AAA(0)    //stack push AA  
      {
        n=0, prints 0,0
        returns
      }              //stack pop  AA
    n=1,arr[0]=1 
      what AAB(0)    // stack push AA
      {
        n=0, prints 0,1
        returns
      }              //stack pop AA
    }                //stack pop A
    n=2, arr[1]=1  
  what AB(1)         //stack push A
   {
     n=1, arr[0]=1
       what ABA(0)   //stack push AB
       {
        prints 1,1
        returns
       }             //stack pop AB
   }                 //stack pop A