Obrigado pelo retorno, eu não percebe que faltava este if, mas sobre o stopifnot, o que eu notei é que retirando e colocando ele não alterava o resultado.
 

Mauro,

Por isso eu escrevi que não havia testado os códigos.

Se vc quiser testar a função, tente com

factorial = function(x){
   stopifnot(x>=0)
   produto=1
   if (x>1)
     for (i in 1:x) produto = i* produto
   produto
}

Sobre o stopifnot, leia o manual da função para entender o uso da função.

b

On Monday, 27 February 2012, Mauro Sznelwar wrote:
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)
    }
}