<div dir="ltr">Ola pessoal.<div><br></div><div>Eu estou com uma dificuldade em como fazer uma chamada recursiva usando o Rcpp.</div><div><br></div><div>Por curiosidade, eu estava fazendo alguns códigos aqui usando o Rcpp, só por experiencia.</div>
<div>Ai eu estava implementando o código para o insertion sort  (<a href="http://pt.wikipedia.org/wiki/Insertion_sort">http://pt.wikipedia.org/wiki/Insertion_sort</a>)</div><div><br></div><div>Minha duvida é a seguinte:</div>
<div><br></div><div>#Suponha que eu tenho um vetor qualquer:</div><div><br></div><div><div>vetor<-sample(100)</div><div>vetor</div></div><div><br></div><div>#Iterativamente, eu fiz um código para usar com o Rcpp assim:</div>
<div><br></div><div><div>library(Rcpp)</div><div><br></div><div>cppFunction("</div><div>    NumericVector insertionsortC(NumericVector vetor) {</div><div>        int n = vetor.size();</div><div><br></div><div>        double aux;</div>
<div>        int i , j;</div><div><br></div><div>        for(i=1;i<n;i++) {</div><div>            aux=vetor[i];</div><div>            j=i-1;</div><div>            while(j>=0 && vetor[j]>aux) {</div><div>                vetor[j+1]=vetor[j];</div>
<div>                j=j-1;</div><div>                }</div><div>            vetor[j+1]=aux;</div><div>            }</div><div>        return vetor;</div><div>        }</div><div>")</div></div><div><br></div><div><br>
</div><div>#Funcionou beleza. Ai eu fui tentar repetir a tentativa, recursivamente</div><div><br></div><div><div>cppFunction("</div><div>    NumericVector insertionsortRC(NumericVector vetor, int n) {</div><div><br></div>
<div>        double aux;</div><div>        int i;</div><div><br></div><div>        if(n>1) {</div><div>            insertionsortRC(vetor,n-1);</div><div>            aux=vetor[n-1];</div><div>            i=n-1;</div><div>
            while(vetor[i-1]>aux && i>=0 ) {</div><div>                vetor[i]=vetor[i-1];</div><div>                i--;</div><div>                }</div><div>            vetor[i]=aux;</div><div>            }</div>
<div><br></div><div>        return vetor;</div><div>        }</div><div>    ")</div></div><div><br></div><div>#E assim funcionou blz, mas eu tive que começar a mandar o argumento n, </div><div>#que é o tamanho do vetor</div>
<div><br></div><div>#o que eu queria é fazer algo aqui, na chamada recursiva</div><div><br></div><div>#insertionsortRC(vetor,n-1);<br></div><div><br></div><div>#sei la, se eu conseguir tirar o ultimo elemento, eu posso suprimir esse n-1</div>
<div>#Eu não entendo de Rcpp e C++ muito bem.</div><div>#Mas tem uma forma simples de mudar o tamanho do vetor, ou arrancar o ultimo elemento dele</div><div>#algo tipo vetor.pop()</div><div><br></div><div>#pra fazer a chamada ficar tipo</div>
<div>#vetor.pop();<br></div><div>#insertionsortRC(vetor);<br></div><div>#que ai no inicio da chamada eu uso o int n = vetor.size(); igual ao formato iterativo.<br></div><div>#Bem, espero não estar sendo muito confuso na pergunta e que a função funcione.</div>
<div>#Mas imagino que deve ser super simples isso.</div><div><br></div><div>Agradeço a atenção desde ja :)</div><div><div><br></div>-- <br><div dir="ltr"><div>Grato<br>Augusto C. A. Ribas</div>
<div> </div>
<div>Site Pessoal: <a href="http://recologia.com.br/" target="_blank">http://recologia.com.br/</a><a href="http://augustoribas.heliohost.org" target="_blank"></a></div><div>Github: <a href="https://github.com/Squiercg" target="_blank">https://github.com/Squiercg</a></div>

<div>Lattes: <a href="http://lattes.cnpq.br/7355685961127056" target="_blank">http://lattes.cnpq.br/7355685961127056</a><br></div></div>
</div></div>