Funções recursivas

Gostaria de entender melhor o funcionamento de funções recursivas, alguns códigos eu faço o chinês do algoritmo e entendo, mas tem uns q eu tenho uma enorme dificuldade de entender 100%. Um exemplo é o código em c++ da função de fibonacci:

 int main(void){

int termo;
double fibo;
cout<<"Digite o termo de fibonacci que deseja saber: "<<endl;
cin>>termo;
cin.ignore();
if(termo==0){
    cout<<"Nao existe termo 0!"<<endl;
    main();
}
cout<<"\nAguarde! Processando..."<<endl;
fibo = fibonacci(termo-1);
cout<<"O "<<termo<<"o. termo da sequencia de Fibonacci eh: "<<fibo<<endl;
system("pause");
return EXIT_SUCCESS;
 }
 }

 double fibonacci(int t){
if(t==0 || t==1){
    return 1;
}else{
    return fibonacci(t-1)+fibonacci(t-2);
}

}

Eu pedi p calcular o 8 termo da série e o valor é 21, mas na hora q vou executar o código passo a passo na mão eu acabo me perdendo nesse return do else onde é feito a soma. Alguém conseguiria me explicar melhor como fumciona esse código