Lista 6 Programação Estatística
1)
fat_rec = function(n){
if((n<0)||(n%%1 != 0)){
stop("n tem que ser um natural")
}
if(n == 0) return(1)
return(n*fat_rec(n-1))
}
fat_rec(5)## [1] 120
2)
maior_rec = function(v){
n = length(v)
if(n == 1) return(v[1])
w = v[2:n]
max_w = maior_rec(w)
if(v[1] > max_w){
return(v[1])
}
return(max_w)
}
maior_rec(c(1,2,5,3,2,5,1,11,2,7))## [1] 11
3)
# 1. Defina n como o tamanho do vetor v;
# 2. Se n = 1, retorne v[1];
# 3. Retorne v[1] + soma_rec(v[2:n])
soma_rec = function(v){
n = length(v)
if(n==1) return(v[1])
return(v[1]+soma_rec(v[2:n]))
}
soma_rec(c(1,2,4,3))## [1] 10
4)
# 1. Defina n como o tamanho do vetor v;
# 2. Se n = 1, retorne 1;
# 3. Defina w = v[1:(n-1)];
# 4. max_pos_w = maior_pos_rec(w);
# 5. Se v[n] > w[max_pos_w], retorne n.
# 6. Retorne max_pos__w.
maior_pos_rec = function(v){
n = length(v)
if(n == 1) return(n)
w = v[1:(n-1)]
max_pos_w = maior_pos_rec(w)
if(v[n] > w[max_pos_w]){
return(n)
}
return(max_pos_w)
}
maior_pos_rec(c(73,77,22,44))## [1] 2
5)
a)
fibo_rec = function(n){
if((n<0)||(n%%1 != 0)){
stop("n tem que ser um natural")
}
if(n==1 || n==2) return(1)
return(fibo_rec(n-1)+fibo_rec(n-2))
}
fibo_rec(8)## [1] 21
b)
6)
a)
7)
# 1. Caso v não for numérico, retorne erro.
# 2. Defina n = tamanho de v.
# 3. Se n = 0, retorne 0.
# 4. Se v[n] = 0, faça aux = 1, caso contrário, aux = 0.
# 5. Defina w = v[-n]
# 6. Retorne aux + conta_nulo_rec(w)
conta_nulo_rec = function(v){
if(!is.numeric(v)) stop("V precisa ser um vetor numérico")
n = length(v)
if(n == 0) return(0)
if(v[n]==0){
aux = 1
}else{
aux = 0
}
w = v[-n]
return(aux + conta_nulo_rec(w))
}
conta_nulo_rec(c(0,2,3,0,0,4,0,0))## [1] 5
8)
# 1. Defina n = tamanho de v.
# 2. Se n = 1, retorne v[1]
# 3. Defina w = v[1:(n-1)]
# 4. Retorne c(v[n],invert_rec(w))
invert_rec = function(v){
n = length(v)
if(n==1) return(v[1])
w = v[1:(n-1)]
return(c(v[n],invert_rec(w)))
}
vet = 1:5 ; vet## [1] 1 2 3 4 5
## [1] 5 4 3 2 1
9)
soma_rec = function(n){
if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
if(n==0) return(0)
return(n+soma_rec(n-1))
}
soma_rec(5)## [1] 15
10)
e_rec = function(n){
if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
if(n==0) return(1)
return(1/factorial(n) + e_rec(n-1))
}
e_rec(1)## [1] 2
## [1] 2.5
## [1] 2.718282