Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Mostrar os elementos da matriz em recursividade

Estou com problema na questão da logica desse exercício, como consigo mostrar na tela uma matriz em recursividade?

Obs: Consegui por vetor, mas com matriz estou com dificuldade

static int matriz(int n, int contador, int contador1,int [,] m) {

            if(contador < n)
            {
                if(contador1 < n)
                {
                    m[contador, contador1] = 1;
                    Console.Write("{0,3}", m[contador, contador1]);
                    contador1++;
                    matriz(n, contador, contador1, m);
                }
                contador++;
                Console.WriteLine();
            }
        }
        static void Main(string[] args)
        {

            int n;
            do
            {
                do
                {
                    Console.WriteLine("Digite o primeiro valor: ");
                    n = int.Parse(Console.ReadLine());

                } while (n < 0 || n > 100);

                int[,] m = new int[n, n];
                int contador = 0, contador1 = 0;
                matriz(n, contador, contador1, m);

            } while (n != 0);

            Console.ReadKey();
4 respostas

Olá, Emillyn

O código não está compilando, pois o método matriz exige um retorno int, mas ele não retorna nada . Para compilar, você precisa substituir:

static int matriz

por:

static void matriz

Além disso, o que esse código deveria fazer, exatamente? Precisamos saber o objetivo dele para poder te ajudar adequadamente.

Enunciado do Exercicio: A entrada consiste de vários inteiros, um valor por linha, correspondentes as ordens das matrizes a serem construídas. O final da entrada é marcado por um valor de ordem igual a zero (0)

Só que queria mostrar por recursividade. Eu mudei para void, só esta mostrando a linha oque estou fazendo de errado?

Saida:

  1

  1   1
  1   1

  1   1   1
  1   1   1
  1   1   1

  1   1   1   1
  1   1   1   1
  1   1   1   1
  1   1   1   1

  1   1   1   1   1
  1   1   1   1   1
  1   1   1   1   1
  1   1   1   1   1
  1   1   1   1   1
solução!

Fiz uma pequena mudança no método matriz, veja se funciona:

using System;

public class Program
{
    static void matriz(int n, int contador, int contador1,int [,] m)
    {
        if (contador * n + contador1 < n * n)
        {
            m[contador, contador1] = 1;
            Console.Write("{0,3}", m[contador, contador1]);

            contador1++;
            if(contador1 == n)
            {
                contador1 = 0;
                contador++;
                Console.WriteLine();
            }
            matriz(n, contador, contador1, m);
        }
    }

    public static void Main(string[] args)
    {

        int n;
        do
        {
            Console.WriteLine("Digite o primeiro valor: ");
            n = int.Parse(Console.ReadLine());

            int[,] m = new int[n, n];
            int contador = 0, contador1 = 0;
            matriz(n, contador, contador1, m);

        } while (n != 0);


    }
}

Funcionou, muito obrigada :D