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.
