E05: Teste seus conhecimentos sobre recursão

E05.0  Que tipos de problemas um algoritmo recursivo é capaz de resolver?

E05.1  Problema: Dado um inteiro x e um vetor a[0..n-1] de inteiros, encontrar j tal que a[j] == x.   Escreva uma função recursiva que resolva o problema.

E05.2  Problema: apagar todos os caracteres # de um vetor de caracteres  c[0..n-1].   Exemplo: Se n vale 7 e o vetor contém   a b c # # d #   então o resultado deve ser   a b c d .   Escreva uma função recursiva para resolver o probema.

E05.3  Considere a seguinte função recursiva. Primeiro, diga o que a função faz. Depois, critique o código.

int maxR (int n, int v[]) {       
   int x;
   if (n == 1) return v[0];    
   if (n == 2) {
      if (v[0] < v[1]) return v[1];
      else return v[0];
   }
   x = maxR (n-1, v);
   if (x < v[n-1]) return v[n-1];
   else return x;
}
   .
   . -
   . --
   . -
   . ---
   . -
   . --
   . -
   . ----
   . -
   . --
   . -
   . ---
   . -
   . --
   . -
   .
   

E05.4  Problema: imprimir uma régua inglesa de ordem n no intervalo [0..2n].  O traço no ponto médio da régua deve ter comprimento n, os traços nos pontos médios dos subintervalos superior e inferior devem ter comprimento n−1; e assim por diante.  A figura mostra uma régua de ordem 4.   Escreva uma função recursiva que resolva o problema.