07 - FUNÇÕES RECURSIVAS - C# - TORNE-SE UM PROGRAMADOR
20.95k views5244 WordsCopy TextShare
Danilo Aparecido - Torne-se um programador
Nesta aula você irá aprender como criar uma função recursiva no C#, verá as vantagens e as desvantag...
Video Transcript:
alô galera do tanque o programador de vida mais uma aula meu nome é de lino e hoje a gente vai pra lá sete falando sobre funções é possível sem fechar que tá legal a gente vai ver o que é uma função recursiva pra que serve uma função recursiva como escrever essa função é impossível no sharp e aí criar um exercício na prática que é um exercício para ler arquivos né e mostrando pra vocês é de uma forma mais fácil o entendimento de como criar ali uma função recursiva e fechar pessoal função recursiva é o ato de uma função chamar a mesma função executando uma ação de forma recursiva entrando em looping tá legal então o que que é uma função tá imagine que você tenha uma time line e você tem uma função aqui aí essa função ela chama ela mesmo ou seja entrando em recurso idade tá quando você entra e recursividade é quando você chama uma mesma ação entendeu então você tem ali o ato de um lápis está aí você chama esse lapso de novo se chama se nada de novo ou seja ele entra em recursos idade porque você chama ele várias vezes quando você entra e recursos idade você faz basicamente um looping tá porque você entra num ciclo que vai ser chamado ali várias vezes é legal as vantagens pessoal que a gente tem de utilizar uma função e cursiva é ela diminui a repetição de código está porque quando você cria uma função recursiva você aproveita tudo aquilo que você fez naquela função chamando ela novamente então essa é a grande vantagem de você que você tem em ter uma função recursiva agora a desvantagem de ter uma função e cursiva é que ela é muito complexa né então a complexidade no entendimento dela é muito maior do que a complexidade de uma função comum ou um raio por exemplo tá muita gente confunde ou com a função recursiva com o looping tá uma coisa elas são parecidas mas uma coisa é uma coisa outra coisa é outra coisa porque o looping sim o lupi ele entra ali num looping tá só que uma função recursiva você tem vários atos lá dentro uma função você consegue desenvolver um programa inteiro com uma função tá então a função é algo muito maior do que simplesmente lupi você pode ter uma função e dentro dessa função você ter um loop e você chama essa função novamente ou seja você tem uma função recursiva que chama um loop entrando em dois looks um dentro do outro entendeu então a função é algo muito mais poderoso do que o looping simplesmente estado que um raio do que um forte então é essa é a diferença de quando você utiliza uma função é impossível quando você utiliza o óleo tá imagina que você tem ali o que é um problema para você resolver tá então vou apagar um pedaço da luz aqui ea imagina que você tem um problema para resolver desse jeito aquilo você tem lá um diretório que tem vários arquivos está tão arquivo um arquivo 2 arquivo 3 então você tem ali o diretório que tem vários arquivos netão uma pasta lá né será uma pasta chamada arquivos e nessa pasta você tem esses três arquivos aí e você tem que fazer um programa para ler todos os itens que estão dentro desses arquivos estão dentro desses arquivos aqui o arquivo 1. 3 xt o 2. 3 xt eo 3.
3 xt tem ali várias linhas dentro dele tá então eles têm várias linhas com vários nomes lá dentro tá imagina que você tem esse problema aqui e aí você quer desenvolver um programa para fazer o que leu o arquivo e ler os dados que estão dentro dele meu outro arquivo e os dados que estão dentro do arquivo meu outro lê os dados que estão dentro do outro arquivo se você tem um problema sim o que você pode fazer criar uma função e dar o nome dessa função como ler arquivos a então se cria uma função chamado ler arquivo e essa função você vai passar o nome do arquivo que você quer tá então seria ali arquivo um ponto txt tá então eu quero ler esse arquivo 1 agora imagina que dentro dessa função aqui você tem o quê eo ael lá tá então enquanto esse arquivo aqui não acabar então por exemplo é file ponto and só um exemplo aqui tá então quando esse arquivo não acabar eu jogos dados desse arquivo na minha tela então eu faço ali um console ponto light online tá e mostro na minha tela o arquivo a linha do arquivo na realidade né e aqui eu fecho a minha função tá imagina que eu tenho uma função dessa forma que eu tenho uma função dessa forma o que eu faço eu mando ler o arquivo 01 tal arquivo na realidade depois que mandei o arquivo um eu entre looping lendo linha por linha desse arquivo então minha primeira linha mostra na terra segunda linha mostra na tela de ser a linha mostra na tela quarta linha mostra na tela depois eu saio desse arquivo aqui e vou embora tá então uma função simples o que eu poderia fazer pra ler esses três arquivos aqui eu poderia simplesmente chamar essa função três vezes nem tão ler arquivo chamou era uma vez chama lá duas vezes chamando lá três vezes passando o nome do arquivo 1 por exemplo um nome do arquivo 2 o nome do arquivo 3 está fazendo isso eu teria que repetir o meu código três vezes uma vez duas vezes 3 e se repetir aqui o a chamada da minha função três vezes eu não preciso fazer isso eu posso simplesmente utilizar o poder da da função recursiva e com ele eu crio uma recursividade lendo todos os arquivos através de uma função somente ok então que eu poderia fazer aqui em baixo aqui da minha função eu poderia colocar aqui enf se o arquivo existe um arquivo existe o arquivo qual o arquivo 2 por exemplo coloca aqui entre um álbum parentes arquivo dois se ele existe o que eu faço eu chamo a função ler arquivos de novo chamando ali o arquivo 2 tá ponto txt se eu faço aqui gente o que vai acontecer fecha a chave do iff fecha a chave da minha função o que vai acontecer ele vai entrar na minha função vai ler o arquivo um vai fazer a liu além do arquivo por arquivo é a linha por linha do arquivo depois que lineu e mostrou na telinha de todos os arquivos eu termino esse while e ver me pergunta se eu tenho o próximo arquivo se eu tenho um arquivo que tem o número 2 se eu tiver o próximo arquivo eu já entrei na minha função entrando na recursividade voltando aqui pra cima da minha função de novo chamando ela e aí entrando no ar de novo agora do arquivo 2 depois que eu verifiquei isso verifique se tem um arquivo três se tiver um arquivo 3 chama função de novo e ele agora passa o arquivo 3 passando arquivo três eu mostro tudo que tem na minha tela do arquivo 3 e saiu da minha função arquivo três só da minha função arquivo 2 saiu da minha função arquivo 1 entrando em recurso idade mostrando os três arquivos e mostrando o conteúdo que tem nos três arquivos é legal imagina esse mesmo exercício aqui numa linha do tempo a gente então esse mesmo exercício numa linha do tempo como que ficaria aqui ó ficaria mais ou menos dessa forma eu tenho minha linha do tempo e aí eu chamei a função ler arquivo eu entrei na minha função ler arquivo e aí dentro dela eu leio linha por linha entrou no lugar de leandro linha por linha depois que eu terminei de ler todas as linhas eu volto pra minha função ler o arquivo eu verifico se tem um arquivo de novo se tem um arquivo 2 eu entro no meu arquivo 2 entre o nulo para mostrar todos os arquivos depois que terminei eu volto pra minha função 2 eu pergunto se tem um arquivo três se tem um arquivo 3 entrou no lugar de novo para mostrar todos os meus dados na tela depois que eu fiz isso daí eu volto pra minha função é verificar se tem um arquivo 4 se não tem um arquivo quatro eu volto para a função do arquivo 3 depois eu volto porque na verdade volta o arquivo dois votos por 15 11 e volto pra minha linha do tempo encerrando o meu programa ok ou seja na realidade né esse aqui é um pensamento de uma função recursiva que eu chamo ela várias vezes e ela me retorna várias vezes é legal então gente que a gente vai fazer agora a gente vai pegar esse mesmo exercício que a gente planejou aqui no quadro e vai executar lá no computador e aí eu vou mostrar pra vocês passo por passo isso que eu estou falando assim você vai conseguir entender mas melhor não entender muito melhor isso é esse todo esse plano que eu coloquei aqui na lusa legal então o pessoal vejo vocês lá no computador legal o pessoal já no computador agora a gente vai executar na prática tudo aquilo que eu passei pra vocês na lousa legal estão fazendo um exercício lá de ler arquivos do do diretório e trazer todos os dados que tem dentro daquele arquivo na tela e chamando várias vezes a mesma função entrando na recursividade tá bom a gente parou nesse exercício aqui né então foi assim que a gente deixou o nosso programa na aula passada tá então a gente vai criar agora uma coisa nova então a gente aprendeu funções na semana passada né agora vou tirar e algumas coisas da funções e vou começar a criar uma nova função uma função que ela vai ler um arquivo em algum lugar tá então a primeira coisa que vou fazer é gente é o seguinte na primeira coisa que vou fazer é criar o arquivo lá no meu diretório então eu fiz isso daqui pra você está então eu vou primeiro eu vou apagar aqui vou mostrar de novo pra vocês como fazer isso tá 62 pontos eu entrei aqui no meu cd dois pontos eu vou apagar essa pasta aqui e vou criar de novo pra vocês notarem eu vou clicar com direito e vou criar uma nova pasta então novo pasta nessa pasta eu vou dar o nome dela de arquivos ok então arquivos ok depois dentro dessa pasta vou colocar um arquivo com alguns nomes já então vou clicar com direito a origem novo e arquivo documento texto vou dar o nome dele pra a r que um choque nenhum em ter legal depois que eu fiz isso daqui eu vou abrir esse arquivo e vou colocar alguns nomes danilo sheila maria fabiana denílson roque coloquei alguns nomes feito isso salvei vou fechar o meu arquivo então só checar se está tudo certo abrir ele tem alguns nomes legal bom tudo bonitinho agora eu quero saber o nome completo desse arquivo se eu clicar com dino nesse nessa barra aqui dos meus arquivos vocês vão ver que ele vai mostrar pra mim o caminho do jeito que eu tenho aqui se eu colocar aqui barra ele vai mostrar tudo o que tem dentro do meu diretório nem é em text né ou seja ele mostra o nome certinho então não é certinho a escritaria arquivo um ponto txt tá ou seja está mostrando a extensão do arquivo em alguns computadores você não vai ter é vocês não vão ter né a extensão do arquivo igual está mostrando no meu aqui então o que eu faço normalmente para mostrar a extensão do arquivo eu posso vir aqui é nas configurações do meu arquivo né então deixa eu dar uma olhada aqui no nas configurações aqui a iacc gente nas configurações do meu arquivo aqui do meu diretório na realidade eu tenho como vir e arrumar a configuração dela pra mostrar a extensão dos arquivos tá então deixa eu ver aqui porque se o windows é um pouquinho mais novo andré o olhar aqui exibe aqui exibir a iac tem todos os negócios aqui tá aqui eu posso falar para demonstrar então o culto ou não e assim vai o que eu quero aqui é mostrar as extensões dos nomes dos arquivos então vou clicar nesse botão ele vai começar a mostrar pra mim a atenção também ao clicar tirei vou colocar mostrei o que é então agora se a extensão desse no arquivo isso gente é importante porque porque você vai pegar esse nome é exatamente igual aqui pra você ler o seu arquivo se você não colocar a extensão lá no seu programa você não vai conseguir ler o arquivo tá bom uma vez feito isso agora a gente precisa saber como que a gente vai fazer pra ler um arquivo está como que a gente consegue ler um arquivo a primeira coisa que vocês vão fazer é vocês vão abrir laboral de vocês vão lá no google e vai digitar assim ler arquivos e sharp e vocês podem a palavrinha stack ok colocando o nome está aqui gente o que vai acontecer ele vai procurar um site chamado stec refutá e sistec flow é um site onde é uma é um fórum onde tem dúvidas das pessoas e outras pessoas respondem cima dessas dúvidas colocando as soluções então é muito prático para você conseguir ali é buscar pedaços de coisas que você não sabe ainda tá então ele é muito importante quando você estiver desenvolvendo então o que você faz ler arquivos e sharp eztec que ele vai achar pra você o site do stec overflow com as dúvidas exatamente do que você precisa então clicar nesse primeiro link aqui ó e aí ele vai ter a alguém está falando que ele está com uma dúvida ok ele está querendo ler esse arquivo tá a única coisa que eu vou fazer é eu vou descer um pouco mais aqui vou achar a solução então tem uma resposta aqui de alguém falando como ele vai ler esse aqui tá então eu sei que é que eu tenho uma função que é vou dineck um vetor nada e que chama processar arquivo que tem um parâmetro chamado file e aí dentro desse parâmetro ele chama lá uma função e using the boy é começar a abrir o arquivo e vai ler linha por linha tendo um aqui fazendo um loop de linha por linha o que então sei que é isso que eu preciso vou pegar essa função e vou executar vou utilizar essa função lá no meu programa tá então eu vou criar uma função minha a função minha vai chamar ler arquivo igual no quadro da então primeira coisa que vou fazer vou deixá-la privada porque não precisa utilizar ela fora desse meu programa então private vou aí porque eu não vou retornar nenhum resultado tá é na realidade antes de vod esthetic porque eu preciso colocar o estético gente porque o meu nem do meu console é estética eu tenho que seguir o padrão se não o meu bem não vai conseguir enxergar isso que estou tentando criar um choque tão público esthetic void e aí o nome ler arquivo ok é importante lembrar que a gente está usando pascal case a gente está utilizando o seu charme então padrão de código pascal case legal bom feito isso vamos ler ali o arquivo e vão dar o nome do arquivo que a gente quer tá tão stringhi o nome do arquivo vou colocar aqui uma variável chamado arquivo mesmo ok opa arquivo legal é tendo essa minha variável agora a única coisa que eu preciso fazer é começar o o código da minha função é tão abrir aqui a minha função e vou começar a produzir o meu código então aqui eu tinha copiado aquele aquele arquivo e vou colar ele aqui ok então colei justamente aquilo que eu peguei lá no meu site tá então peguei essa informação do site e coloquei aqui no meu programa depois quando eu faço isso algumas coisas eles não vão reconhecer e vai ficar aqui o tracejado vermelho como vocês estão vendo a única coisa que você tem que fazer é colocar o mouse em cima da onde está atrás e já no vermelho vai aparecer uma lâmpada pra vocês vão clicar nessa lâmpada e vão clicar no usem alguma coisa né o nome de que ele vai vir no caso aqui ele está utilizando a biblioteca foi o tá então clicar nela você vai ver quem vai ficar verde ok esse é trash pouco não vou precisar porque se eu não vou precisar então eu vou tirar essa linha aqui porque eu não preciso desse prédio público porque a única coisa que eu quero ler os arquivos e mostrar na minha tela simplesmente isso ok então o que eu vou fazer aqui vou substituir esse frio aqui pela minha variável arquivo legal fiz isso daí a os nomes aqui estão incompatíveis porque um parquinho e outro arquivo em cima tá então vou colocar aqui ó nome no caso de parâmetro gente eu prefiro colocar os parâmetros e sharp nono padrão é no padrão kamel case é legal então vou colocar as variáveis não pra dar um caminho que é assim que o programa tá então vocês podem seguir o mesmo padrão também então nome arquivo ou seja quando é variáveis ou variáveis está é variáveis privadas eu coloco ele como kamel case com de algo público ou funções ou classes eu coloco como kamel case é legal então fez isso daqui agora o que eu vou fazer é chamar essa variável aqui para ler o meu arquivo então o que eu estou fazendo estou abrindo esse arquivo ok então com a abertura dele eu consigo ter acesso às linhas dele né então quando eu criei uma instância dele utilizar esse uso aqui é para criar uma instância eu abro ele e aí eu mantenho esse arquivo aberto dentro dessa variável arquivo quando um rede online eu leio a primeira linha e vou para a próxima linha ok e aí eu coloco um pin aqui pra ele ler a próxima linha ea próxima linha próxima linha até que as linhas estejam acabados ok legal então o que eu vou fazer aqui colocar um console ponto log e aí nesse console ponto log um ponto right on line desculpa né ponto light on line e aí nesse console contra o haiti online eu quero mostrar a linha que eu li kwok linha a minha variável linha prontinho fiz isso aqui quer dizer que eu já vou conseguir ler um arquivo e mostrar na minha tela os dados que eu acabei de ler tá depois que eu fiz isso daí a única coisa que eu vou chamar é a minha função lá na minha execução do programa consome ok então vou passar um nome aqui vou colocar o nome exatamente o que está lá no meu diretório tá então vou clicar aqui de novo ok vou colocar no barra e ele vai mostrar pra mim o nome do meu arquivo exatamente como eu quero opa de novo né clicar aqui e ele mostra exatamente como eu quero então vou copiar isso daqui e vou colocar esse nome de igual está aqui lá no meu programa tá então na minha estréia aqui eu vou passar o nome que eu quero legal depois que eu fiz isso daí eu vou colocar o arroubo aqui ó só que ele não dá em compatibilidade com as barras legal pronto com arquivo aqui agora a gente vai fazer um de burger para ver o que vai acontecer né então vou colocar um de boa vir aqui e ver linha por linha se ele vai entrar dentro do meu arquivo e se ele vai começar a mostrar tudo que eu preciso tá então vou dar um player ele vai executar pra mim legal para não debater eu vou para o próximo entrando dentro do meu item netão entrando dentro da minha função como para o próximo mandei o arquivo para o próximo mandei a primeira linha do arquivo ou seja agora o meu arquivo tem a linha 1 danilo ok vou pro próximo e ele vai lendo até que a minha condição seja inválida ou seja até que eu não tenha mais linhas no meu arquivo ok então feito isso ele termina ali a minha ação mostrando na minha tela tudo que eu pedi para ele para euller do arquivo é legal então feito isso a gente já tem uma função para ler os dados do arquivo é legal agora imagine o seguinte eu tenho vários arquivos dentro desse diretório como é que eu poderia fazer leroy king um arquivo 2003 e assim vai é legal então o que eu vou fazer fazer uma mudança na minha função é colocando aqui simplesmente o número do do arquivo que eu quero ler é legal então vou mudar aqui para intitular e aí eu vou colocar aqui número arquivo e aí nesse número arquivo eu vou fazer um nome aqui concatenado para fazer exatamente o que eu preciso vou criar primeiro uma string chamado caminho ok nessa stream que caminho eu vou colocar o caminho que está os meus arquivos então vou recordar isso aqui daqui e vou colocar aqui ok então eu tenho a lhe o caminho com o nome né como tem o caminho com o nome eu vou simplesmente concatenar com o arquivo ou editar o arquivo é o número do arquivo que eu estou passando número arquivo é legal então agora eu tenho um arquivo um arquivo 2013 e assim vai bom perfeito fiz isso daí agora o próximo passo é o que eu verificar se aquilo existe então eff a minha biblioteca fire ponto é que existe se esse arquivo existe qualquer arquivo eu vou colocar aqui o melhor ao invés de caminhar vou colocar como um arquivo com o caminho com o caminho rock então se existe o meu arquivo com o caminho opa eu vou fazer toda essa minha função aqui de ler esse arquivo ok então recortei aqui vou colar esses dados aqui e vou continuar se eu não tenho eu não vou fazer nada tá se eu tenho eu faço eu não tenho eu não faço nada tá depois disso eu verifico que se existe um novo arquivo a eu posso fazer uma verificação se existe um novo arquivo se existir eu vou leno e assim vai tá então esse aqui é o nome da minha variável eu vou usar esse nome da minha variável aqui tá legal então eu tenho o meu número aqui tenho o meu arquivo aqui e tenho o arquivo que eu vou ler é legal é pra verificar se isso funcionou a primeira coisa que vou fazer é executar né então eu vou colocar aqui um ou seja ele vai executar vai mandar ler o arquivo concatena com 13 xt arquivo 1. 3 xt vamos rodar esse daqui e vamos ver como vai ser o resultado dessa vez vou parar de bater aqui em baixo pra gente ver como ele vai ficar executado por completo legal o resultado foi o mesmo porque ele me mostrou todos os dados que está no arquivo está se a gente for depurar então pare para ver passo por passo porque eu quero ver como é que ficou essa concatenação aqui ó eu clicar aqui para fazer um de burger simplesmente aqui ok dá um play para não debater aqui e vou ver que ele vai ter um número um toque então eu vou pra aproximação seu olhar dentro dessa variável vai tê las e dois pontos arquivo um e aí vai dar na mesma do que a ação anterior dando play ele executa tudo e mostra pra mim na tela aquilo que eu falei né legal agora eu quero ler o artigo 231 4 e assim vai tá se eu tivesse que fazer o mesmo código se eu tivesse eu não usasse a função recursiva o que eu teria que fazer chamar essa função aqui várias vezes ok essa função de novo essa função de novo essa função de novo e aí eu teria que repetir o meu código colocando 2 colocando três colocando quatro ok ou fazendo for se eu não quero fazer isso se não quero repetir essas linhas várias vezes eu posso utilizar o que a função recursiva ok então eu vou dentro dessa minha função chamar ela mesma ok então vou fazer o seguinte ó if se existe o que esse arquivo aqui ó eu vou fazer o seguinte ó vou criar uma nova variável chamada arquivo dois né então deixa eu tirar aqui copiar vou chamar aqui o caminho com um arquivo dois toque e aí vou fazer o quê esse arquivo mais um tá tão arquivo mais um ok ou seja se ele vai vir com um que eu passei na minha ação mais um ele vai ser 2 legal então se ele é 2 o que eu estou fazendo a minha válvula de escape tá então eu vou colocar um hífen aqui para verificar se o arquivo dois existe tá então se existe o arquivo 2 eu vou entrar na minha são qual que é a minha são agora a minha ação é chamar a minha própria função passando o arquivo mais 1 ou seja essa esse arquivo que é 11 mais um ele vai tentar ler o arquivo dois e ele vai tentar ler o arquivo 3 e ele vai tentar ler o arquivo 4 e assim eu resolvo o meu problema com simplesmente uma função tal eu não preciso mais fazer aqui várias vai ouvir várias repetições desse medo dessa minha leitura desta função porque porque dentro dessa função eu chamo ela mesmo um pouco confuso não é só olhar que só vai falar numa como assim como é que funciona desse jeito eu vou depurar e vocês vão conseguir entender que eu chamo ela várias vezes entrando numa recursividade legal então vou colocar aqui o break point aqui em cima tá e aí vocês vão seguir comigo passa por passo primeiro eu vou lá e mandou ler o meu arquivo um netão arquivoo se existe existe eu faço a lei todas as linhas mostrando na minha tela todo mundo que tem que tem no arquivo 1 mostrando aqui é todo mundo que tem no arquivo um tampão ou para o próximo para o próximo para o próximo terminei mostrei todo mundo que tinha um arquivo um ok depois disso eu saio do meu no pib do meu inf e aí eu verifico se tem um arquivo 2 o arquivo que tem um mais um ele vai virar 2 ou seja amstrong aqui então vai ser time é ser dois pontos arquivos arquivo 2.