Github guide for Open Source Contributions

I’ve always wanted to contribute to Open Source projects and I am proud to say that recently I achieved that by doing my¬†first code contributions to some cool projects! There are lots of resources online about contributing to Open Source Projects, especially from Github, but it doesn’t hurt writing another one, right? And writing this Guide will help me because now I don’t have to search the commands every time ūüôā

For me, the hardest part was finding a project where I felt welcomed as a beginner and comfortable with the technology used. I was looking at the Rails Girls Summer of Code projects and after some days, I started doing contributions to Public Lab and If me organizations.

If I am in any position of giving an advice,¬†I’d say to look out for projects that you feel comfortable and that makes sense to you and to your learning path.¬†It probably isn’t a good idea to start contributing to the Linux kernel, if you are learning how to program,¬†for example.

You can take a look at the open Issues and choose one that you want to work.¬†If you think you can work on an Issue, for example, but need to clarify some things, go ahead and ask the team! ūüôā

Another thing that is helpful in this discovery adventure is to read the documentation. Providing a careful documentation usually says a lot about the team communication and organization.

I like to follow these two guides from Lucas Mazza and Thoughtbot to help me with Git in my contributions. I recommend you to read these two before going further.

Setting our application

Now that we have selected the project and selected an Issue to work on, we must go to their repository and click on the ‘Fork’ button:

This will create a new repository in our Github Account with the current state of the application. You can see it by clicking on your account’s repositories. That’s the repository where we’ll add our changes, instead of playing with the original. This is good because it guarantees that we’ll never affect the original repository, so we won’t be afraid of breaking something and focus on our work ūüôā

Now, on our local machine, we clone our forked project (remember to modify the personal info with yours):

git clone git@github.com:stefannibrasil/plots2.git

The next step is to make sure everything is running okay, following the project Installation guide. After that, we can go ahead and create a new branch in our forked repository:

git checkout -b 'my-new-branch'

It’s up to you if you want to create a new branch or work on your local master. I prefer always having a branch for each new feature.

Now we have everything ready for our actual work! Remember to write good commit messages and provide good context for the reviewers while doing them. This post¬†helped me a lot with that ūüôā

Submitting our changes

When we are done with our changes, the next step is to open a Pull Request to say that we want to merge our changes into the original code. Normally, visiting the Github project page after pushing changes from a local branch will put a notice with the branch name.

I find it easier to open the Pull Request just clicking on ‘Compare & Pull Request’:

But if that doesn’t happen, you can do that by clicking on ‘New pull request’ and search for your branch there.

Note: If you aren’t done yet but you want to know if you are on the right path, you can always open a new PR to get some feedback. Just add a ‘[WIP] – Add new feature’ to its name and ask for a review.

Keeping our forked repository updated

Because other people are making modifications to the code at the same time, our forked repository needs to get these changes frequently, so we will always have the updated code to work on.

We can do that by adding the project repository as one of our remote repositories.¬†We can copy the link provided in the original repository ‘clone or download’ button and run the following command:

git remote add upstream git@github.com:publiclab/plots2.git

Now if we run

git remote -v

we should have two remote repositories listed, ours and the project’s:

origin git@github.com:stefannibrasil/plots2.git (fetch)
origin git@github.com:stefannibrasil/plots2.git (push)
upstream https://github.com/publiclab/plots2.git (fetch)
upstream https://github.com/publiclab/plots2.git (push)

Now run these on master:

git fetch upstream # to retrieve new work done by ther people
git rebase upstream/master # to rebase upstream into your master
git push origin master

If that ran smoothly, you must see that your forked repository is even with the original:

If you’ve created a branch as I did, run the following command to also rebase your branch with the updated master:

git checkout my-new-branch
git rebase master/my-new-branch

Now we have our repository updated and that will decrease the number of conflicts in the future. If conflicts happen, it’s not the end of the world. Git usually provides helpful messages about the errors to guide you while solving them (and Google, always).

Some notes

After doing your¬†first Open source contribution you’ll likely find out that the code that you change is just half of the work. You need first to¬†communicate with the team, see if you understand the problem and ask for help, for example.

But don’t worry if you don’t feel ready to do any of this. Don’t let that hold you back. If the project you choose is beginner-friendly, the team will help you with anything that you need. Besides, you’ll learn a lot from this experience, trust me.

Another note that I want to share is this video from Eileen. She talked a little about her Open Source experience developing a feature for Rails 5.1:

And that’s it for today. I hope you find this Guide useful. If you have anything to suggest or add, please, add a comment below ūüôā See you next!

 

Some random thoughts

Hello, there!

It’s been a while since I don’t write anything here. For those who don’t know, my husband and I moved this year to Vancouver, Canada and that took us some time to solve everything but now I am back! ūüôā

This got me thinking about how hard it is for us, humans, to change. This isn’t my first moving, in fact, this is the 4th time I am moving to another city in the past 10 years. You have to start everything again: meet new people¬†-hopefully,¬†make a new friend- learn the culture, habits, etc.

But you don’t need to move to another country to change any aspect of your life. No matter what it is, you have to show up and say to the world what you want. The best opportunities that happened¬†to me was because I pushed myself to go there, even when I was in doubt. I am not saying every opportunity will be great, but at least you’ll learn something from the experience.

Don’t think I didn’t feel scared. I was, but I am feeling better about my choices since I started¬†trying¬†to think about what could go right, always. You should try it.

How to apply your coding skills to turn yourself into a self-made millionaire

Before you start to read, I have some things to say. I am not a millionaire *yet*. I like coding and studying investments. And lately, I’ve been reading a lot about Business and how to create a product in order to generate passive income that will help me achieve financial independence faster.

I have been following some people from Indie Hackers and what I really like about this community is that you don’t need to create the next revolutionary startup (unless you want it) to be in business. There’s a lot of people who solved a problem they faced for months or years until they saw there was an opportunity to start a small business and make some money.

Eventually, your business can get big or not. And that’s okay if that’s okay with you. You don’t need to be the next Google, the next Uber in order to be successful, and you don’t even need investors. Startup life is something that you really should get to know well before jumping in because it can be (stressful).

I was reading Stephanie Hurlburt blog another day and I found this great article about software development and Business :

I know many developers who are essentially making products and giving them away for just a salary or throwing them out because they don’t truly understand their worth. Next time you work on a project, really think about what your work is worth and get creative about how to get at that.

This reminds me that, as a developer, I have a feeling that almost everybody I know don’t believe they can run a business, so they don’t even try. Of course, for us, marketing and dealing with clients isn’t something that we would usually bet our money on. Sales and software development are totally different things, and it’s hard to sell something to a client that wants something you know it’s impossible to do build as a developer.

But that’s worth trying. Do the math: let’s say your product generates a recurring monthly revenue of $ 1,000. Multiply that for 12 months (1 year) and for 60 months (5 years). That’s a nice amount of extra money, right? That money could be put into investments. When you get the taste of making more passive income I don’t think you’re gonna settle for less.

Think about being financially independent. Don’t get me wrong, I know that will not be easy. But wouldn’t that be great if you had to work only on what you love and not because you have to pay your bills? Wouldn’t that be great if you had the time (the most expensive thing in this world) to live your life the way you want it? That’s the spirit. Set your goals and don’t settle for less, my friend.

Let me know how many of you already have a business and how many of you are interested in having one. Cheers!

Fui no Rails Girls, e agora?

Esse ano a edição do Rails Girls São Paulo aconteceu no fim de semana passado, nos dias 18 e 19 e foi no espaço roxinho da Nubank. Em 2015, eu fui como participante (você pode conferir minha experiência aqui neste post) e este fui como coach, uma promessa que tinha feito pra mim mesma. Foi uma experiência que acredito que todos devam passar, pois o pouco que sabemos (ou que achamos saber) pode ajudar alguém e mudar a vida de todos nesse processo.

Uma das coisas que mais me deixam feliz nesses projetos voltados a incentivar mulheres a programar √© a tem√°tica dos projetos que as participantes sugerem. √Č incr√≠vel a quantidade de ideias e propostas que surgem da realidade das pessoas que n√£o s√£o representadas na tecnologia. Eu sempre acreditei no poder da tecnologia e do conhecimento para mudar a vida de muita gente e ver isso na pr√°tica me deu mais g√°s para seguir com os meus projetos e espero que voc√™ tamb√©m ūüėÄ

Bom, a inten√ß√£o deste post √© dar uma sugest√£o de guia para quem quer continuar a programar com Ruby on Rails. Desde j√°, aviso que √© bom voc√™ n√£o perder contato com sua coach, pois as d√ļvidas surgir√£o e √© f√°cil querer desistir diante de um problem√£o que n√£o temos ideia de como resolver. Mas com paci√™ncia, voc√™ chega l√° e √© muito importante ter uma mentora no in√≠cio, acredite em mim.

Minha dica √© separar um hor√°rio por dia, como por exemplo, 30min por dia. Pode parecer pouco, mas n√£o subestime suas escolhas do dia a dia e o impacto que isso traz daqui uns anos na sua vida, ūüôā O ideal √© praticar todo dia, assim voc√™ relembra mais facilmente o que voc√™ fez e praticando diariamente voc√™ se compromete consigo mesma, que tal?

Os projetos que sugiro s√£o:

1 – Agile Web Development with Rails

Livro muito bom (de graça!) que ensina a construir um e-commerce, usando metologias ágeis, testes e git :). Muito bom para dar continuidade ao que vocês aprenderam.

2 – The Odin Project

Conheci esse projeto uns dias atr√°s, √© muito bom! E tem uma comunidade bem ativa tamb√©m, portanto, d√ļvidas s√£o comuns e voc√™ pode conhecer outras pessoas que est√£o aprendendo tamb√©m. J√° se inscreve e fa√ßa um pouquinho de cada vez.

3 – Code School

Esse site é pago, mas se você puder/quiser investir, recomendo. Alguns cursos sao gratuitos, mas a maioria é pago.

4 – RubyThursday

Site muito bom que conheci m√™s passado. Nas quintas voc√™ recebe uma newsletter com tutorias curtinhos, dicas e truques para quem est√° come√ßando uma carreira de desenvolvodera Rails ūüôā

Bom, n√£o adianta nada encher aqui de links, no come√ßo pode assustar, ent√£o, se quiser come√ßar nessa ordem, acho uma boa. E sempre lembre que o Google e o StackOverflow ser√£o suas melhores companhias a partir de agora. S√≥ v√° com calma, entenda que leva um tempinho at√© tudo come√ßar a fazer sentido, mas se voc√™ gostou de programar, ent√£o tudo isso vai valer a pena e √© um processo muito bacana. Espero voc√™s como coaches nas pr√≥ximas edi√ß√Ķes, combinado?!

PS. Fui coach junto com a D√©bora (manja muito de Rails :P) e meu time foi o da Henritta Swan Leavitt (os nossos dos times eram de mulheres cientistas ūüėÄ e tem uma fotinha desse time maravilhoso que tenho orgulho de dizer que fiz parte) e o nosso projeto foi o de listar centro de doa√ß√Ķes no Brasil, o Doe Felicidade. O c√≥digo est√° no github, ent√£o, quem quiser contribuir, fique √† vontade! √Č bem legal dar continuidade √† ideia, pois voc√™ aprende, monta um portf√≥lio e ajuda muita gente por a√≠ <3

 

 

#VamosJuntas

What nobody tells you when you decide to learn how to code

If you decided to change your career to a technology related field, you probably faced some internal demons. And the first thing that I want to say to you right now is: it’s hard, but not impossible and it’s worth it. And you’re not alone! I was tired of reading only the good and fun and the unrealistic reality of learning to code, so I want to share my experience and hopefully help someone.

When I was first introduced to coding, I fell in love with programming. Since then, it’s been a roller coaster of feelings and motivation and this year I finally started to feel more confident about my choice.

I see some people saying that programming is super easy, that everybody can learn, etc. Sure, I do believe that everybody can learn, but if you don’t have the passion or the curiosity, I have to say that you will eventually feel like “oh, this is not for me”. And the worst, you will think that you are the problem… “if this was supposed to be easy and I can’t code, then the problem must be me, right?”

Wrong, so wrong! It is a process and there are some things you have to learn in order to survive this journey.

So here are some things that I have learned in the last 1 year doing Computer Science and how I am motivating myself to be a better developer while finishing my degree:

1 – It is hard

Even if you did not have a good education in science and mathematics, that should not stop you. It’s all about how bad you want it.

2 – You have to learn to be patient and resilient

The reality is that you won’t solve all the problems at first, but that is okay. Every time you overcome a challenge you become better and more confident. The point is: you have to learn how to learn and how to persist in face of the daily difficulties.

3 – Do a project that you love, yeah… but it’s not about the destination, it is about the journey

What about when you decide to develop something you love but you have no idea how to start? Search for good practices, good tutorials and ask for advice from someone you feel comfortable to ask. Sometimes you may find yourself struggling with something, but with a little help from your friends, you will get it and sometimes learn more than just how to solve that problem ūüôā

4 – Do not ever compare yourself to others

I say this because my boyfriend has almost 8 years of experience in software development and I caught myself having high expectations although I am still learning to code! Frustration is not good, but if you learn from it, you will be okay. So, be careful when comparing yourself to others. Instead, try to learn from their experiences too.

5 – Have fun

Coding is one of my favorite things and sometimes I feel like I am missing this part because I am worrying too much about finishing the semester and doing other personal tasks. But, hey, focus on the present and be proud of yourself because you are investing in the most important thing in the world: your education. And nobody will stop you!

So, what are the others challenges that you faced when you changed your career? I would love to know more about other experiences and learn more. Cheers!

Como ter uma relação saudável com o seu dinheiro

Este √© um post bem diferente, mas que queria compartilhar por aqui. De um ano pra c√°, mudei muito como me relaciono com dinheiro e acredite, nunca √© tarde! Quanto mais cedo voc√™ tomar consci√™ncia do que significa ter independ√™ncia financeira, melhor para voc√™. Se voc√™ quiser ler mais sobre isso, recomendo o conte√ļdo que o Leandro √Āvila oferece gratuitamente no Clube dos poupadores.

A questão é que muitas das coisas que fazemos são feitas sem reflexão, apenas repetimos o que aprendemos culturalmente e dinheiro é uma questão cultural muito forte no Brasil. Um exemplo disso é que a maioria das pessoas acreditam que o dinheiro serve apenas para gastar! Pois bem, eu não sei em que mundo você vive, mas no meu mundo, dinheiro é poder e símbolo de independência financeira e se você não tiver controle nem consciência do que fazer com o seu dinheiro, as lojas irão fazer isso por você.

E acredito que voc√™ n√£o queria depender de um governo corrupto para garantir que voc√™ ter√° uma aposentadoria, certo? \o/ Essa cita√ß√£o do Leandro √Āvila √© muito legal e te deixa bem pensativo:

Se existe uma coisa que devemos diminuir quando estamos falando de dinheiro, essa coisa se chama depend√™ncia. Quanto menos voc√™ depender financeiramente do Estado, institui√ß√Ķes de previd√™ncia e at√© de amigos e parentes no futuro, melhor ser√° para voc√™. A depend√™ncia financeira nunca foi algo desej√°vel. Busque mais liberdade. Quanto mais independ√™ncia financeira, mais liberdade, mais possibilidades, menos problemas e mais tranquilidade. A independ√™ncia financeira n√£o √© garantia de felicidade, mas ela ajuda nas √°reas da sua vida onde o dinheiro tem utilidade.

E isso foi justamente o que me fez mudar de comportamento sobre dinheiro, principalmente quando pensei no quanto eu seria feliz se trabalhasse no que gosto e n√£o porque tenho contas para pagar. Geralmente as pessoas entram na ‘Corrida dos Ratos’ e fazem contas sem nem perceber e a√≠ v√£o gastando cada vez mais com coisas para faz√™-las esquecer do trabalho! Louco, n√£o?

A partir de agora, sempre que vou gastar com algo, faço muitas contas e decido o que é melhor, nada por impulso. Até porque geralmente o impulso de consumir vem de um problema interno relacionado à sua vida, então, muito cuidado ao consumir sem parar para pensar antes!

Então aqui vão algumas dicas para ter uma relação mais saudável com o dinheiro que passei a praticar e recomendo:

1 РMultiplique o valor daquilo que viocê quer adquirir por 2 ou 3 anos e veja o impacto na sua vida
2 РSempre compre à vista (se você não tem o dinheiro para pagar, então não compre)
3 – Dedique um tempinho todo dia para ler sobre um investimento novo (recomendo J√ļlia Mendon√ßa, Gustavo Cerbasi e Me poupe)
4 РFale com seus amigos sobre finanças e discuta sobre isso sem vergonha ou medo

Depois que voc√™ come√ßa a analisar essas coisas, voc√™ aprende a sair do autom√°tico e a dar mais valor √†s suas a√ß√Ķes, ao seu trabalho e ao seu tempo. Maravilha, n√£o? Tudo √© quest√£o de escolha.

Até a próxima!

Minha primeira linguagem funcional: Elixir

Elixir √© uma linguagem funcional que vem ganhando bastante espa√ßo nos √ļltimos tempos. √Č bom para pensar um pouco fora da caixa, principalmente para quem est√° acostumado a programar usando apenas linguagens imperativas (C, Java, etc.), como euzinha aqui. Dentre os maiores paradigmas de programa√ß√£o, a funcional √© a mais antiga!

As linguagens funcionais podem ser compreendidas como avalia√ß√Ķes de express√Ķes feitas pelo computador, em que uma fun√ß√£o pode envolver outras fun√ß√Ķes (se voc√™ quiser saber mais, procure sobre C√°lculo Lambda).

Fiz o curso Try Elixir, do CodeSchool (gratuito e bem r√°pido, corre l√°!). Nessa mesma semana em que tive meu primeiro contato com Elixir, tivemos uma revis√£o de fun√ß√Ķes compostas na faculdade e pra mim foi bem legal ver esses conceitos matem√°ticos assim diretamente aplicados.

Em Matem√°tica, por exemplo, podemos fazer v√°rias fun√ß√Ķes dentro de fun√ß√Ķes. Considere

f(x) = sen(x);
g(x) = log(x);
h(x) = x‚Āī;

Podemos fazer a seguinte composi√ß√£o das fun√ß√Ķes acima: f(j(h(x))), ou seja,

sen(log(x‚Āī))

Assim, pensei em implementar essa função composta em Elixir e para fazer isso, vamos usar o pipe operator. Ele funciona assim (veja mais aqui):

O operador pipe é representado por |>, recebe o resultado de uma expressão e passa ele adiante. Vamos dar mais uma olhada no trecho de código acima reescrito com o operador pipe:

other_function() |> new_function() |> baz() |> bar() |> foo()
O pipe pega o resultado da esquerda e o passa para o lado direito.

Usamos a biblioteca :math, que é a mesma usada em Erlang, ficando assim:


defmodule CompositeFunction do
  def my_example(x) do
    result = :math.pow(x, 4)
    |> :math.log()
    |> :math.sin()
    IO.puts(result)
  end
end

Para rodar local, digite iex para entrar no compilador, depois c(“composite_function.ex”) e depois CompositeFunction.my_example(seu_argumento). E Voil√†!

Rodando CompositeFunction.my_example(5) no terminal, ele retorna:
0.15395162623403327
:ok

Espero que curtam, até a próxima!

Can you get the loop? #Codewars

No final do ano passado meu namorado me mandou esse site super legal para treinar Algoritmos (sempre bom): Code Wars. Porque eu curti? √Č mais amig√°vel, a comunidade √© mais ativa e voc√™ cria um cl√£ com seus amigos. Ainda que voc√™ seja iniciante, ele te sugere problemas mais dif√≠ceis para voc√™ ir treinando, al√©m de mostrar as solu√ß√Ķes de outros participantes para voc√™ analisar e aprender boas pr√°ticas depois de submeter sua solu√ß√£o. E j√° que falamos de cl√£s, quem quiser entrar no meu, a√≠ vai o link: entre no meu cl√£! =D

Semestre passado, vimos algumas Estruturas de Dados e dentre elas, listas encadeadas. Daí resolvi resolver um Kata para revisar nas férias e postar aqui para discutir com vocês.

O problema

Pode ser acessado aqui e a seguir a descrição:

You are given a node that is the beginning of a linked list. This list always contains a tail and a loop.
Your objective is to determine the length of the loop.
For example in the following picture the tail’s size is 3 and the loop size is 11.

Portanto, a solu√ß√£o requer descobrir a posi√ß√£o do tail (que ser√° o n√≥ cujo conte√ļdo se repete) para retornar o tamanho do loop. O que eu fiz foi criar um dicion√°rio e armazenar os conte√ļdos dos n√≥s at√© encontrar um que se repete – o tail. A partir da√≠, rodei outro while para retornar o tamanho do loop. O c√≥digo em Python pode ser visto a seguir:


def loop_size(node):
    my_dict = {} 
    p = node // node é o head que foi passado como argumento
    my_dict[node] = p //inicializando dicion√°rio com o conte√ļdo de node
    
    while p.next not in my_dict: 
        p = p.next
     
    my_dict[p] = p
    tail = p // ao sair do loop eu acho o tail, pois é ele que repete
    
    t = tail
    size = 1 
    while t.next != tail: 
        t = t.next
        size +=1
        
    return size

Sei que é possível resolver esse problema sem utilizar dois whiles, mas por enquanto fica essa solução e depois eu posto novamente o código refatorado, pois ainda preciso estudar mais sobre dicionários. Curtiram? =P

Manual de sobrevivência 2016.2

√Č com muita alegria que vos falo neste post, pois minha meta desse ano em rela√ß√£o √† faculdade era passar em todas e consegui!!

ai que alegria e sufoco!

Foi muito puxado, pensei em desistir de uma matéria, maaaaas tem que perseverar e nunca desistir! Essa foi uma lição muito importante que aprendi esse ano e que repasso a quem tiver lendo esse post =D

Bom, aí vão os links que me ajudaram para sobreviver a este semestre, separados por disciplina (olha como sou legal xD):

Algoritmos II

Pois bem, esse semestre a mat√©ria mais legal foi a de Algoritmos, onde estudamos recurs√£o, algoritmos de ordena√ß√£o, busca bin√°ria, an√°lise de algoritmos e algumas estruturas de dados. Links super √ļteis:

Algorithms, Part I

Curso gratuito online, se joga!

Sorting Algorithms

Playlist muito didática para quem curte aprender por vídeos.

Data Structures

Idem.

Visualising data structures and algorithms through animation

Esse site é muito legal e foi meu amigo Márcio quem me mandou. Bem colorido e didático.

Dica que vale passar sem sufoco: às vezes você acha que entendeu, mas é só praticando que terá certeza e verá os pontos que não compreendeu, portanto, implemente os algoritmos antes das provas!

C√°lculo I

Segunda mat√©ria mais legal!! C√°lculo √© muito legal e vou deixar tamb√©m alguns links de v√≠deos e sites que me ajudaram a compreender melhor os conte√ļdos: limites, derivadas e introdu√ß√£o ao c√°lculo integral.

LCM Aquino

Segunda vez que esse canal me ajuda, gosto das explica√ß√Ķes dele, pois sempre mostra as provas dos teoremas, al√©m de muitos exemplos.

Toda a Matem√°tica

Esse canal também é muito legal e o professor sempre posta vídeos curiosos do mundo da Matemática.

Wolfram

Site para calcular tudo que você imaginar. Tem plano com desconto para estudante, onde você tem acesso à solução e pode verificar suas respostas (:

Organização e Arquitetura de Computadores

Consegui passar de boa, então você também consegue xD Aí vão os links:

Introdução a Arquitetura de Computadores

Livro muito bom e necess√°rio para a mat√©ria. Tem poucos conte√ļdos online que explicam t√£o bem quanto este livro e que seguem a mesma ementa do Senac (:

Memória Principal

Vídeo que me salvou na primeira prova =D

Projeto Integrador II – Jogo educacional 2D

Graças a meu professor, pude desenvolver o mesmo jogo do meu projeto de Iniciação Científica em Python. O link tá no meu github e vocês podem conferir o meu =D
Nesse PI não posso ajudar muito aqui, a não ser incentivar a criar um jogo que você goste muito da ideia (:

√Ālgebra Linear

Playlist salvadora

Khan Academy

√Č isso, espero que isso seja √ļtil e at√© mais!

Compreendendo Recurs√£o

Muito bem, semestre começou com tudo e estou aprendendo muita coisa nova! Uma delas que estou vendo agora é Recursão. Se você já ouvi falar de Algoritmos, provavelmente já deve ter ouvido falar de Recursão também. De acordo com o material da nossa aula

um processo recursivo é um processo que implementa uma relação de recorrência. Uma relação de recorrência é uma expressão matemática utilizada para expressar uma equação de recorrência.

Wait, what? Vamos por partes, pois esse é um conceito muito difícil de ser compreendido, mas vale a pena, prometo. O mais legal de se aprender recursão é criar algoritmos menores e mais bonitos (embora nem sempre seja o mais eficiente!). Resumindo, uma função recursiva vai chamar a si mesma e retornando os valores de cada chamada, até chegar no caso base.

Calma, n√£o √© m√°gica! Acredito que uma das maiores dificuldades seja compreender os passos para escrever uma fun√ß√£o recursiva para que esta n√£o caia num loop infinito. Por isso √© preciso ter aten√ß√£o √†s duas partes essenciais de uma chamada deste tipo e verificar com n√ļmeros inteiros o problema at√© que voc√™ entenda o que ser√° o caso base e a chamada recursiva a partir do exemplo a seguir:

Considere um vetor de inteiros de tamanho n. Uma função recursiva que calcule o produto dos elementos estritamente positivos de um vetor de inteiros v [0..n-1].

 int produto (int v[], int n) {
     if(n == 1){
   	 return v[0];
     }
     if(v[n-1] > 0){
   	 return v[n-1] * produto(v, n-1);
    }
	return produto(v,n-1);
 }

O caso base РEssa é a parte que você sabe o resultado e deve se aproximar na próxima etapa. No exemplo abaixo, vemos que o caso base é a condição if (n == 1) return v[0];, pois quando o vetor chegar até o primeiro elemento, não há mais necessidade de se calcular o produto, certo?

A chamada recursiva РEsta deve ser quebrada em pedaços menores até atingir o caso base. No nosso exemplo, fazemos duas chamadas distintas. Caso o elemento da posição v[n-1] a ser testada seja positiva, então retornamos return v[n-1] * produto(v, n-1); , caso contrário, chamamos a função para continuar a descrescer o valor de n até atingir o valor de 1, nosso caso base.

O que a função faz é o seguinte. Vamos supor que o nosso vetor v[4] = {1, 2, 3, 4} e o tamanho do vetor seja n = 4.

produto(v, 4)

v[3] * produto(v, 3)
v[3] * v[2] * produto(v, 2)
v[3] * v[2] * v[1] * produto(v, 1)
v[3] * v[2] * v[1] * v[0]
>> 4 * 3 * 2 * 1 = 24

Esse exemplo foi retirado desse material e está disponívelneste link. Veja também outras formas de usar a recursividade para resolver o mesmo problema (:

V√° fazendo com calma cada passo para n√£o se perder (o que √© muito f√°cil) e compreender como o computador entende essas chamadas (vale printar todas as entradas para ver o valor de retorno a cada chamada). D√° um trabalho e sua cabe√ßa buga por um momento (ou dias xD), mas seu c√≥digo fica mais bonito e te deixa com uma sensa√ß√£o maravilhosa de finalmente aprender Recurs√£o ūüôā