Como criar funções recursivas em matlab
Existem muitas técnicas de programação elegantes em MATLAB, mas nenhum é tão elegante como a função recursiva. Você cria uma função que se mantém chamando até que uma condição é satisfeita, e, em seguida, a função proporciona uma resposta com base nos resultados de todas as chamadas. Este processo da função que se chama várias vezes é conhecido como recursão,
Conteúdo
Video: Aula 10 - Tutorial de Matlab - Criar função
O exemplo mais comum recursão está calculando fatorial (n!), Onde n é um número positivo. (Cálculo de um meio factoriais multiplicando o número por cada número abaixo dela na hierarquia. Por exemplo, 4! É igual a 4 * 3 * 2 * 1 ou 24.)
A maioria dos exemplos que mostram como criar uma função recursiva realmente não demonstrar como funciona o processo. Os passos seguintes ajudá-lo a criar uma função recursiva que não demonstrar como funciona o processo.
Clique na seta sob a nova entrada no separador Início do menu MATLAB e selecione Função a partir da lista que aparece.
Video: matlab - criando função de transferencia
Você vê a janela do Editor.
mudança output_args resultar.
A função retorna um resultado a cada ciclo anterior da chamada.
Alterar o nome da função de Sem título para Factorial1.
O nome da função primária deve corresponder ao nome do arquivo.
mudança input_args para Valor, Nível.
o Valor recebeu é sempre um a menos que o chamador anterior recebido. o Nível demonstra como Valor está mudando ao longo do tempo.
Digite o seguinte código na função entre o comentário ea fim palavra-chave.
se nargin lt; 2Level Valor = 1-endif gt; 1fprintf ( `Value =% d =% Nível dn`, Valor, Nível) -Result = Factorial1 (Valor - 1, Na + 1) * Valor-disp ([ `Resultado =`, num2str (Resultado)]) - elsefprintf ( `Value =% d =% Nível dn`, Valor, Nível) -Result = 1-disp ([ `Resultado =`, num2str (Resultado)]) - extremidade
Este exemplo faz uso de um argumento opcional. A primeira vez que a função é chamada, Nível não terá um valor, para que o aplicativo atribui automaticamente um valor de 1.
O código quebra a tarefa multiplicação em pedaços. Por exemplo, quando Valor é 4, o código tem de multiplicar por 2 * 3 * 1. O 3 * 2 * 1 parte da imagem é definida pela chamada para Factorial1 (Value - 1, Nível + 1).
Durante a passagem seguinte, Valor é agora 3. Para obter o resultado adequado, o código deve multiplicar este novo valor por 2 * 1. Assim, enquanto Valor é maior do que um (em que um resultado real seja possível), o ciclo deve continuar.
A função recursiva deve sempre ter um ponto final - uma condição sob a qual ele não vai chamar-se novamente. Neste caso, o ponto final é a outro cláusula. Quando Valor é finalmente menos do que 1, Resultado é atribuído um valor de 1 e simplesmente retorna, sem chamar Factorial1 () novamente. Neste ponto, o ciclo chamado desenrola e cada nível de devoluções, um de cada vez, até que uma resposta final seja alcançado.
Observe que este exemplo usa uma nova função, fprintf (), para exibir na tela informações. o fprintf () função aceita uma especificação de formatação como sua primeira entrada. Neste caso, a especificação diz para imprimir a string valor =, seguido pela informação encontrada em Valor, então nível =, seguido pela informação encontrada em Nível.
o % d na especificação do formato de conta fprintf () para imprimir um valor inteiro. Você usa fprintf () como um substituto para disp () quando a formatação de saída começa a se tornar mais complexa. Notar que disp () requer o uso do num2str () função para converter o valor numérico Resultado a uma corda, a fim de imprimi-lo.
Clique em Salvar.
Você vê a Selecione Arquivo caixa de diálogo Salvar como para. Observe que o campo Nome do arquivo tem o nome correto entrou para você.
Clique em Salvar.
O arquivo de função é salva no disco.
Digite Factorial1 (4) e pressione Enter na janela de comando.
Você vê o seguinte resultado:
Valor = 4 = Nível 1Value = 3 Nível = 2Value = 2 Nível = 3Value = 1 Nível = 4Result = 1Result = 2Result = 6Result = 24ans = 24
Observe que toda a Valor e Nível saídas de vir em primeiro lugar. A função deve continuar chamando-se até Valor atinge 1. Quando Valor chega a 1, você vê o primeiro Resultado saída. Claro, Resultado também é 1. Observe como a recursão desenrola. Nas próximas Resultado é 2 * 1, em seguida, 3 * 2 * 1, e finalmente 4 * 3 * 2 * 1.
Agora que você tem uma idéia melhor de como a recursão funciona, olhar para a versão enxuta.
função [resultado] = Factorial2 (Value)% Factorial2 - Calcula o valor de n% Saídas o valor factorial da entrada number.if valor! gt; 1Result = Factorial2 (Value - 1) * Valor elseResult = 1-endend
A versão final é muito menor, mas não sai qualquer informação útil para lhe dizer como ele funciona. Claro, esta versão será executado muito mais rápido também.