Estava rodando os scripts e vi que o stopifnot(x>=0) se retirado não altera nada. No caso iterativo do factorial não funciona se fizer factorial(0)=0, como forçar para factorial(0)=1?
 
f2 <- function(x){
    stopifnot(x>=0)
    if(x<=1){
        1
    }else{
        x*f2(x-1)
    }
}


2012/2/26 Mauricio Cardeal <
mcardeal2010@gmail.com>:
> Benilton, por curiosidade testei os códigos e o primeiro funcionou certo,
> mas o segundo acusou erro:
>
>> factorial = function(x){
> +   stopifnot(x>=0)
> +   produto=1
> +   for (i in 1:x) produto = i* produto
> +   produto
> + }
>> factorial(3)
> [1] 6
>> f2 = function(x){
> +   stopifnot(x>=0)
> +   If(x<=1){
> Erro: '{' inesperado em:
> "  stopifnot(x>=0)
>   If(x<=1){"
>>     1
> [1] 1
>>   }else{
> Erro: '}' inesperado em "  }"
>>     x*f2(x-1)
> Erro: objeto 'x' não encontrado
>>   }
> Erro: '}' inesperado em "  }"
>> }
> Erro: '}' inesperado em "}"
>>
>
> Mauricio Cardeal
>
> UFBA
>