34.1-5
Mostre que um algoritmo que efetua no máximo um número constante de chamadas a sub-rotinas de tempo polinomial é executado em tempo polinomial, mas que um número polinomial de chamadas a sub-rotinas de tempo polinomial pode resultar em um algoritmo de tempo exponencial.
O problema está nos tamanhos das entradas para as sub-rotinas. Se as chamadas são em número constante, não há como os tamanhos das entradas crescerem além de um fator constante vezes o tamanho da entrada do próprio algoritmo, resultando em tempo polinomial.
Por outro lado, mesmo um número linear de chamadas a sub-rotinas lineares pode resultar em tempo exponencial, como mostra o exemplo abaixo, onde os argumentos exp e stri são strings.
Alg ( exp ) s <- esp.size for i <- 1 to s do exp <- Dobra(exp)
Dobra (stri) return stri + stri // + significa concatenação de strings
O algoritmo Alg gasta tempo Ω(n . 2n), onde n é o tamanho da entrada.