Exercícios do Capítulo 7

valor = 500
juros = 0.075
for(i in 1:3){
  valor = valor*(1+juros)
  print(paste0("Em ",i," ano(s) teremos ",valor))
}
## [1] "Em 1 ano(s) teremos 537.5"
## [1] "Em 2 ano(s) teremos 577.8125"
## [1] "Em 3 ano(s) teremos 621.1484375"
# f(n) = f(n-1)*(1+juros)
# 1. Caso n não seja natural, retorne erro.
# 2. Se n=0, retorne 500;
# 3. Retorne investimento_rec(n-1)*(1+0.075)
investimento_rec = function(n){
  if((n<0)||(n%%1 != 0)){
    stop("n tem que ser um natural")
  }
  if(n == 0) return(500)
  return(investimento_rec(n-1)*(1+0.075))
}
investimento_rec(3)
## [1] 621.1484
investimento_rec = function(i,j,n){
  if((i<0)) stop("i tem que ser positivo")
  if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
  if(j>1 || j < 0) stop("j é um número entre 0 e 1")
  
  if(n==0) return(i)
  
  return(investimento_rec(i,j,n-1)*(1+j))
}
investimento_rec(1000,7.5/100,2)
## [1] 1155.625
paste0("Com investimento de 1000 reais com juros de 7.5% ao ano em 2 anos temos R$:",investimento_rec(1000,7.5/100,2)," Já com 10% ao ano temos R$:",investimento_rec(1000,10/100,2)," Uma diferença de R$:",investimento_rec(1000,10/100,2) -investimento_rec(1000,7.5/100,2) )
## [1] "Com investimento de 1000 reais com juros de 7.5% ao ano em 2 anos temos R$:1155.625 Já com 10% ao ano temos R$:1210 Uma diferença de R$:54.375"
valor = 1200
juros = 0.02
pagamento = 150
for(i in 1:3){
  valor = valor*(1+juros) - pagamento
  print(paste0("Em ",i," ano(s) teremos ",valor))
}
## [1] "Em 1 ano(s) teremos 1074"
## [1] "Em 2 ano(s) teremos 945.48"
## [1] "Em 3 ano(s) teremos 814.3896"
# f(n) = f(n-1)*(1+juros) - pagamento
# 1. Caso n não seja natural, retorne erro.
# 2. Se n=0 retorne 1200;
# 3. Faça d = pagamento_rec(n-1)*(1+0.02) - 150;
# 4. Se d<0, retorne 0. Senão, retorne d.
pagamento_rec = function(n){
  if((n<0)||(n%%1 != 0)){
    stop("n tem que ser um natural")
  }
  if(n==0) return(1200)
  d = pagamento_rec(n-1)*(1+0.02) - 150
  if(d < 0) return(0)
  else return(d)
}

pagamento_rec(3)
## [1] 814.3896
pagamento_rec(8)
## [1] 118.5459
pagamento_rec(9)
## [1] 0
pagamento_rec = function(v,j,k,n){
  if((v<0)) stop("v tem que ser positivo")
  if(j>1 || j < 0) stop("j é um número entre 0 e 1")
  if((k<0)) stop("k tem que ser positivo")
  if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
  
  if(n==0) return(v)
  d = pagamento_rec(v,j,k,n-1)*(1+j) - k
  if(d < 0) return(0)
  else return(d)
}
pagamento_rec(1200,2/100,150,10)
## [1] 0
pagamento_rec(1200,2/100,120,10)
## [1] 148.8268
# 1. Caso j não esteja entre 0 e 1, retorne erro.
# 1. Caso k não seja positivo, retorne erro.
# 2. Se v<=0, retorne 0.
# 3. Retorne 1 + quitamento(v*(1+j)-k,j,k)
quitamento = function(v,j,k){
  if(j>1 || j < 0) stop("j é um número entre 0 e 1")
  if((k<0)) stop("k tem que ser positivo")
  
  if(v<=0) return(0)
  
  return(1 + quitamento(v*(1+j)-k,j,k))
}
quitamento(1200,2/100,120)
## [1] 12
quitamento(1200,2/100,150)
## [1] 9
quitamento(1200,2/100,200)
## [1] 7
mdc_rec = function(n,m){
  if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
  if((m<0)||(m%%1 != 0)) stop("m tem que ser um natural")
  
  if(m<n) {
    maior = n
    menor = m
  }
  else{ 
    maior = m
    menor = n
  }
  
  if(menor == 0) return(maior)
  
  return(mdc_rec(menor,maior%%menor))
  
}

mdc_rec(125,325)
## [1] 25
mdc_rec(2829,861)
## [1] 123
mdc_rec(299,217)
## [1] 1
crescimento_exp_rec = function(n){
  if(n==1)
    return(list(0.1,0.1))
  
  pagamento_vespera = crescimento_exp_rec(n-1)
  
  pagamento = list(2*pagamento_vespera[[1]],pagamento_vespera[[2]]+2*pagamento_vespera[[1]])
  return(pagamento)
}
crescimento_exp_rec(20)
## [[1]]
## [1] 52428.8
## 
## [[2]]
## [1] 104857.5
crescimento_exp_rec(22)
## [[1]]
## [1] 209715.2
## 
## [[2]]
## [1] 419430.3
  1. (Questão Desafio)
permuta_rec = function(vetor){
  if(length(vetor) == 1){
    return(list(vetor))
  } else {
    permutacoes = c()
    for(i in 1:length(vetor)){
      letra = vetor[i]
      letras = vetor[-i]
      permuta_letras = permuta_rec(letras)
      for(elemento in permuta_letras){
        frase = c(letra, elemento)
        permutacoes[[length(permutacoes)+1]] = frase
      }
    }
    return(permutacoes)
  }
}
permuta_rec(c("a","b","c"))
## [[1]]
## [1] "a" "b" "c"
## 
## [[2]]
## [1] "a" "c" "b"
## 
## [[3]]
## [1] "b" "a" "c"
## 
## [[4]]
## [1] "b" "c" "a"
## 
## [[5]]
## [1] "c" "a" "b"
## 
## [[6]]
## [1] "c" "b" "a"
permuta_rec(c(1,2,3))
## [[1]]
## [1] 1 2 3
## 
## [[2]]
## [1] 1 3 2
## 
## [[3]]
## [1] 2 1 3
## 
## [[4]]
## [1] 2 3 1
## 
## [[5]]
## [1] 3 1 2
## 
## [[6]]
## [1] 3 2 1