Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MerciaGabi

funcoes recursisvas - como criar?

Recommended Posts

Pessoal, tdo bem?

Preciso de uma orientação de como criar uma função recursiva, que seja capaz de ter uma tabela MySql , varias vezes até uma condição ser estabelecida.

Eu preciso preencher uma array, onde na primeira linha preciso colocar todos os IDP que sejam iguais ao ID,
A
B, C,J
D,E,F, G,H,I,K
L,M,N

A tabela principal seria

ID, DESCRICAO, IDP ARRAY ou TABELA TEMPORARIA
1, A, 0 Linha 1 = B,C,J
2,B,1 Linha 2 = D,E,F,G,H,I,K

3,C,1 Linha 3 = L,M,N

4,D,2

5,E,2

6,F,2

7,G,3

8,H,3
9,I,3
10,J,1

11,K,,10
12,L,5

13,M,5
14,N,5

*IDP = Significa a que registro, deverá ser ligado o registro em questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma função recursiva não é a melhor maneira de realizar essa tarefa, um iterador seria melhor, veja, quando você utiliza a recursão o código fica mais limpo, mas o CallStack da função, ou seja, a quantidade de chamadas que a função vai realizar pode exceder o limite da linguagem, dando a famosa StackOverflowException e em alguns casos a função pode até ser mais lenta do que sua versão iterativa (vide fibonacci).

 

Mas vamos lá. Primeiramente você precisa preencher um array previamente com todos os dados que você quer retornar e iterar sobre ele ao invés de fazer várias chamadas para o banco. Então esse é o primeiro passo. Sua função vai ter como parâmetros de entrada o array de valores propriamente dito, a posição atual e a quantidade de valores que o array possui.

 

function SQLRecursivo (array, atual, total) {
  if(atual >= total) {
    return -1;
  }
  //Sua lógica aqui
  return SQLRecursivo(array, atual+1, total);
}

 

O caso base vai ser quando o atual for maior ou igual ao total de linhas (significando que você chegou no final).

 

Agora se você quiser passar um valor para todas essas funções e no final deles retornar o valor executado, você provavelmente vai ter que usar um outro parâmetro que vai ser esse valor persistente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.