Maior elemento de um vetor utilizando uma função de recursão

209 views
Skip to first unread message

Clayton Calixto

unread,
Nov 3, 2016, 7:00:09 AM11/3/16
to Python Brasil
Prezados, tudo bem?

Alguém tem algum exemplo de código ou algoritmo em Python que traga o maior elemento de um vetor utilizando uma função de recursão(recursiva)? Estou sem minha VM aqui, mas assim que acessá-la vou postar meu código feito, mas a função recursiva estou apanhando demais. Muito obrigado por qualquer auxilio.

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
Nov 3, 2016, 7:03:03 AM11/3/16
to python...@googlegroups.com
Por que precisa ser recursiva? Esta treinando programacao funcional com python?
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



<< ideas don't deserve respect >>

Clayton Calixto

unread,
Nov 3, 2016, 7:24:43 AM11/3/16
to Python Brasil
Marcello, bom dia!

Sim, estou treinando a linguagem e precisa ser recursiva, pois preciso utilizá-la em uma apresentação onde vai mostrar as diferenças nas métricas entre iteração, recursão e paralelizada. Qualquer ajuda será bem vinda.

Muito obrigado,

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
Nov 3, 2016, 8:09:55 AM11/3/16
to python...@googlegroups.com
Algo simples, nao testei:


```
v = [1,2,3,5,6,7,4,1,3,2,8,4]

def biggest_of_2(v1, v2):
return v1 if v1>=v2 else v2

def find_biggest(v):
return v[0] if len(v) == 1 else biggest_of_2(v[0], find_biggest(v[1:]))

print ("Biggest element: {}".format(find_biggest(v)))

```

Talvez ficasse mais bonito declarando as funcoes como lambda.

[]s
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Renzo Nuccitelli

unread,
Nov 3, 2016, 11:21:04 AM11/3/16
to python...@googlegroups.com
Também tenho estudado programação funcional.

Achei elegante a solução do Marcelo mas essa seria quadractica por conta do slicing. Também só funcionaria se existe se a estrutura permitir isso.

Segue uma solução que seria linear e aceitaria qualquer iteravel:


Abs,
--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


Renzo Nuccitelli

unread,
Nov 3, 2016, 11:31:52 AM11/3/16
to python...@googlegroups.com
Se preferir não trabalhar com iteravel vc pode gerar a lista. Mas nesse caso é melhor começar pelo final, já que o algoritmo seria linear:


Apesar de mais complexa, prefiro a primeira por ser constante em gasto de memoria, enquanto essa solução é linear.

@Marcelo:

Eu tenho estudado o SICP por conta da indicação de um amigo. Ele inclusive foi resolvendo os exercícios do livro e comentando em portugues:


Não tive tanto saco, só estou postando minhas soluções sem explicar muito:


Abs,

Diego Nascimento

unread,
Nov 3, 2016, 2:30:50 PM11/3/16
to python...@googlegroups.com
minha versão, só não me perguntem como, mas funcionou... deve ter um erro no return (fazendo mais coisas do que devia, está  amontoando recursão), mas não tenho experiência nesse tipo de recursividade com python, se alguém puder dar uma olhada e corrigir.. tentei fazer como no ml.. mas me atrapalhei.

=========== ml ============
let rec max_recursive lista =
   match lista with
   | [] -> 0
   | x :: [] -> x
   | x :: xs ->    
  let v = max_recursive xs in
     if x > v then x else v;;
=========== ml ============




---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

<< ideas don't deserve respect >>

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
Nov 3, 2016, 2:46:57 PM11/3/16
to python...@googlegroups.com
Interessante Renzo, vou dar uma olhada boa no site. 

Vai comentando na lista aih, seria legal tentar solucoes em python para os problemas. 

[]s




---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

<< ideas don't deserve respect >>

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
Nov 3, 2016, 2:52:52 PM11/3/16
to python...@googlegroups.com
Diego, voce colocou chamadas da funcao dentro do if. 
Isso aumentara consideravelmente o tempo de execucao. 

Me pergunto se tem uma maneira facil de conseguir o tail sem precisar do slicing...

Renzo, voceh veh alguma forma de conseguir isso comecando pelo ultimo?

Subject: Re: [python-brasil] Re: Maior elemento de um vetor utilizando uma função de recursão
minha versão, só não me perguntem como, mas funcionou... deve ter um erro no return (fazendo mais coisas do que devia, está  amontoando recursão), mas não tenho experiência nesse tipo de recursividade com python, se alguém puder dar uma olhada e corrigir.. tentei fazer como no ml.. mas me atrapalhei.

=========== ml ============
let rec max_recursive lista =
   match lista with
   | [] -> 0
   | x :: [] -> x
   | x :: xs ->    
  let v = max_recursive xs in
     if x > v then x else v;;
=========== ml ============

Em 3 de novembro de 2016 13:31, Renzo Nuccitelli <ren...@gmail.com> escreveu:

Clayton Calixto

unread,
Nov 3, 2016, 8:01:10 PM11/3/16
to Python Brasil
Pessoal, agradeço muito, o que era uma simples dúvida virou uma discussão sadia que agrega conhecimento. Obrigado Renzo pelas dicas de livro e curso, nas férias da facu, vou dar uma olhada com carinho. Agora segue o código, utilizei a ideia do Jefferson e adequei a minha necessidade, mas não rodou, podem me dar uma ajuda?

#!/usr/bin/python
# -*- coding: utf-8 -*-
# -*- coding: ascii -*-

from random import randint, randrange, choice, sample

def vetorMaior2(vetor1, vetor2):
   return vetor1 if vetor1>=vetor2 else vetor2

def vetorMaior(vetor):
   return vetor[0] if len(vetor)== 1 else vetorMaior2(vetor[0], vetorMaior(vetor[1:]))

   

#Definindo o tamanho do vetor
tamanho =  2000

#Criando os vetores
vetor = [0]*tamanho

#Inserção de forma aleatória dos valores nos vetores
vetor = sample(range(0,4999),tamanho)

#Criação e impressão do range aleatório entre 0 à 4999
for i in range(tamanho):
   vetor = vetorMaior(vetor)
print "\n", vetor

#Imprimindo o maior elemento do vetor
print ("\nMaior valor:", max(vetor))




Em quinta-feira, 3 de novembro de 2016 09:00:09 UTC-2, Clayton Calixto escreveu:

Diego Nascimento

unread,
Nov 3, 2016, 11:57:31 PM11/3/16
to python...@googlegroups.com
deixe o cabeçalho assim:


#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
sys.setrecursionlimit(5000)



setrecursionlimit dá um limite maior da recursão que por default é 1000


qual a intenção do código abaixo? se for só imprimir o range gerado vc pode usar 'print(vetor)' ele já foi gerado aleatoriamente em 'vetor', se sacar essa parte do código o resto está funcionando, veja o que você quer e refaça essa parte, tem erro lógico nela.
--
#Criação e impressão do range aleatório entre 0 à 4999
for i in range(tamanho):
   vetor = vetorMaior(vetor)
print "\n", vetor


essa parte do código pode mudar de:
--------------------------------------------------------
#Imprimindo o maior elemento do vetor
print ("\nMaior valor:", max(vetor))
--------------------------------------------------------
para
--------------------------------------------------------
#Imprimindo o maior elemento do vetor
print("\nMaior valor: {}".format(vetorMaior(vetor)))
--------------------------------------------------------

era para usar o 'vetorMaior' não era?



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

alan

unread,
Nov 4, 2016, 4:27:59 AM11/4/16
to Python Brasil
Quicksort

Renzo Nuccitelli

unread,
Nov 4, 2016, 6:55:05 AM11/4/16
to python...@googlegroups.com
As duas soluções que postei seriam otimizadas com recursão de calda (tail recursion) se Python implementasse isso. Outra solução seria manter o indice como estado. Isso evitaria o pop que coloquei na lista. Ou seja, evitaria mutação e a função seria realmente O(n) em vez de um O(n) amortizado, já que que a lista dinamica precisa se adequar ao tamanho dos dados.

Segue mais essa solução, agora mantendo o índice como estado:


Abs,

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
Nov 4, 2016, 9:39:49 AM11/4/16
to python...@googlegroups.com
Tambem implementei minha solucao com indices e lambdas:


Adorei o exercicio, quero mais problemas! :D

Renzo Nuccitelli

unread,
Nov 4, 2016, 1:23:28 PM11/4/16
to python...@googlegroups.com

Da uma olhada no SICP que esta cheio lá.  Da primeira vez que li eu ficava pesquisando a origem das formulas matematicas de la. Nao passei do primeiro capítulo. Agora eu simplesmente assumo as fórmulas como verdades e focu na programação.  Estou capitulo 2.

Interessante que no livro ele menciona que formas especias de iteração, como o for do python, sao "defeitos" de linguagem sem tail recursion que por conta disso necessitam dessa formas para atingir processo iterativo.

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
Nov 4, 2016, 2:28:43 PM11/4/16
to python...@googlegroups.com
Cara, eu ateh toparia pega o SICP, mas ele parece focar *mesmo* na parte funcional. 

Eu estava pensando em tomar vergonha na cara e implementar um exercicio daqui por semana:


Soh para melhorar um pouco mais os skills base, dai partiria para algo como o SICP. 

Sera que o pessoal daqui da lista, incluindo voceh, toparia o desafio de 1 exercicio dessa pagina por semana? :D

Diego Nascimento

unread,
Nov 4, 2016, 6:53:27 PM11/4/16
to python...@googlegroups.com
eu estou estudando ocaml agora, para aprender a programação funcional e estou gostando, se você tiver interesse Marcelo, estou estudando por esse mooc.

https://www.fun-mooc.fr/courses/parisdiderot/56002S02/session02/about

é interessante, nos dá um outro ponto de vista sobre a solução de problemas no dia a dia, sem contar que ocaml é uma linguagem super rápida e prática e se pode usar para projetos pessoais sem arrependimento.


[]s
Abs,



---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

<< ideas don't deserve respect >>

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.


<< ideas don't deserve respect >>

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.


<< ideas don't deserve respect >>

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.


<< ideas don't deserve respect >>

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Renzo Nuccitelli

unread,
Nov 4, 2016, 7:03:44 PM11/4/16
to python...@googlegroups.com
Exatamente por isso estou estudando o SICP, para ver se entendo pq a galera que programa funcional taca tanto o pau em OO. E também vc sempre melhorar no geral ao forçar um novo paradigma.

Resolvi o primeiro do site que vc mandou para ver como estou de lisp, segue a solução: https://github.com/renzon/sicp/blob/master/binary-gap.rkt

Desvirtuamos totalmente a thread, talvez seja bom abrir outra off-topic.

Se alguem for estudar lisp, da uma olhada na parte de teste automatico que até venho usei nesse exercicio e venho usando qdo possivel no livro

@Marcelo
Se vc tiver o saco de lembrar o enunciado do exercicio que estiver fazendo, eu resolvo em lisp para treinar ;)

Abs,

Clayton Calixto

unread,
Nov 4, 2016, 10:34:25 PM11/4/16
to Python Brasil

Diego, adequei meu codigo com suas dicas mas muda uma coisa e muda outra dá erro, consegue me ajudar?


#!/usr/bin/python
# -*- coding: utf-8 -*-
# -*- coding: ascii -*-

import sys
sys.setrecursionlimit(7000)


from random import randint, randrange, choice, sample

def vetorMaior2(v1, v2):

   return v1 if v1>=v2 else v2

def vetorMaior(v):
   return v[0] if v[0] == 1 else vetorMaior2(v[0], vetorMaior(v[1:]))


  

#Definindo o tamanho do vetor
tamanho =  2000

#Criando os vetores
vetor = [0]*tamanho

#Inserção de forma aleatória dos valores nos vetores
vetor = sample(range(0,4999),tamanho)

#Criação e impressão do range aleatório entre 0 à 4999
for i in range(tamanho):
   vetor = vetorMaior(vetor)
   print(vetor)


#Imprimindo o maior elemento do vetor
print ("\nMaior valor:{}".format(VetorMaior(vetor)))

###  Segue o erro: ###

clayton@debian:~$ cd Documentos
clayton@debian:~/Documentos$ python maior_recursivo.py
4987
Traceback (most recent call last):
  File "maior_recursivo.py", line 29, in <module>
    vetor = vetorMaior(vetor)
  File "maior_recursivo.py", line 14, in vetorMaior
    return v[0] if v[0] == 1 else vetorMaior2(v[0], vetorMaior(v[1:]))
TypeError: 'int' object has no attribute '__getitem__'
clayton@debian:~/Documentos$


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Diego Nascimento

unread,
Nov 5, 2016, 12:26:37 AM11/5/16
to python...@googlegroups.com
--> remove a linha '# -*- coding: ascii -*-'

deixa apenas utf8..

--> tem um erro na função, a sua está assim:
----------------------------------------------------------------
def vetorMaior(v):
   return v[0] if v[0] == 1 else vetorMaior2(v[0], vetorMaior(v[1:]))

----------------------------------------------------------------
deve ficar assim:
----------------------------------------------------------------
def vetorMaior(v):
   return v[0] if len(v) == 1 else vetorMaior2(v[0], vetorMaior(v[1:]))
----------------------------------------------------------------

--> aqui outro erro
o seu está assim:
-----------------------------------------------------------------
#Imprimindo o maior elemento do vetor
print ("\nMaior valor:{}".format(VetorMaior(vetor)))
-----------------------------------------------------------------
deve ficar assim, começando com minúscula:
-----------------------------------------------------------------
#Imprimindo o maior elemento do vetor
print ("\nMaior valor:{}".format(vetorMaior(vetor)))
-----------------------------------------------------------------


essa parte eu ainda não entendi, se você tirar ela fora, o código já roda:
----------------------------------------------------------------

#Criação e impressão do range aleatório entre 0 à 4999
for i in range(tamanho):
   vetor = vetorMaior(vetor)
   print(vetor)
----------------------------------------------------------------


me explique o que deve ser feito, eu não entendi esse comentário, você quer imprimir o vetor já criado??



---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Diego Nascimento

unread,
Nov 5, 2016, 12:31:08 AM11/5/16
to python...@googlegroups.com
Para criar o vetor, você pode criar já com os dados aleatórios dentro dele, ex:

tamanho =  2000
vetor = sample(range(0,4999),tamanho)

.. não há necessidade de se inicializar ele anteriormente, pode remover a linha que tem:
--------------------------------------------------------------------
#Criando os vetores
vetor = [0]*tamanho
--------------------------------------------------------------------

Diego Nascimento

unread,
Nov 5, 2016, 12:37:17 AM11/5/16
to python...@googlegroups.com
veja aqui, no gist

https://gist.github.com/SkNix/fe35268e5e24822d7fce735d6d9124b4

.. está funcionando, corrigi ele e removi essa parte do código:


----------------------------------------------------------------
#Criação e impressão do range aleatório entre 0 à 4999
for i in range(tamanho):
   vetor = vetorMaior(vetor)
   print(vetor)
----------------------------------------------------------------

Agora você sabe o que está funcionado, reveja essa parte do código que removi, veja o que quer que ela faça e refaça esse código, o resto está funcionando então se preocupe só com refazer essa parte do código que está gerando erro, e eu não consegui entender qual é sua função, se você me explicar posso te ajudar.

Marcelo Valle

unread,
Nov 5, 2016, 8:46:22 AM11/5/16
to Python Brasil
Vou acabar aprendendo alguma linguagem funcional tambem alem de python. Nao sei se eh melhor Ocml, Haskel, lisp...
Mas fico contente que curtiram a ideia de irmos trocando solucoes, vou adorar comentar sobre os problemas aqui na lista. Por hora estao muito simples, daqui a pouco comecam a ficar mais complicados...

Diego Nascimento

unread,
Nov 5, 2016, 9:07:39 AM11/5/16
to python...@googlegroups.com
Marcelo, estou gostando muito de ocaml, é uma linguagem com uma sintaxe bonita, fácil de aprender e se tem uma boa produtividade com ela, muitas empresas grandes a usam a anos com sucesso, como a janestreet capital, microsoft, facebook, bloomberg..  algumas usam tbm para prototipação de software, aqui tem uma lista de quem usa.


eu gosto por que com ela é possível escrever software para o mundo real, eu gosto de haskell tbm mas eu acho que é meio complicado escrever software real com ele, muito purista, lazy.. está crescendo muito atualmente, mas na prática é complexo para usar em projetos reais, na minha opinião neh... então fica minha recomendação de ocaml =) .. já estudei tbm scheme básico e gostei, mas tbm não vi muita utilidade para o dia a dia, agora tem o racket que parece ser melhor concebido, tem baterias inclusas e tbm tem ótimos recursos funcionais, dos lisps acho que é o mais funcional de todos, quando estudei foi através de mooc tbm, esse:




---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Diego Nascimento

unread,
Nov 5, 2016, 9:07:51 AM11/5/16
to python...@googlegroups.com

Marcelo Valle

unread,
Nov 5, 2016, 9:13:33 AM11/5/16
to Python Brasil
De fato, tem uma comunidade Ocml aqui na BB. Vou considerar fortemente aprender com ela!
Obrigado Diego!

Renzo Nuccitelli

unread,
Nov 5, 2016, 9:33:21 AM11/5/16
to Python Brasil
Aproveitando que o pessoal está falando em aumentar limite da pilha, certa vez pesquisei sobre recursão de calda em Python e cai no SO: http://stackoverflow.com/questions/13591970/does-python-optimize-tail-recursion.

Inclusive vi lá o hack que o JS apresenta de utilização de decorators para conseguir usar na linguage. Tinha achado duas implementações mais não cheguei a brincar com nenhuma. Alguém já usou?

Marcelo Valle

unread,
Nov 5, 2016, 4:57:33 PM11/5/16
to Python Brasil
Não usei e fiquei impressionado de saber que criaram decorators para isso!!

Contudo, entendo que isso seja uma forma de conseguir programar de maneira funcional em python sem ficar preso a limitacoes de tamanho de pilha. Numa linguagem funcional, como lisp ou ocml, contudo, o código ficaria mais *rápido* que recursao com pilha e nao apenas 10% mais lento, correto?

A vantagem de usar algo assim seria conseguir usar legibilidade de código para alguns algorítimos com python mesmo para listas grandes. Mas não é algo que eu usaria em produção...

Apesar de adorar python, acho que se houvesse a necessidade de usar algo assim em prod isso seria um indicativo de estar usando a linguagem errada para o tipo de problema que se quer resolver. 

Agora, para o exercício que estamos fazendo de estudar features funcionais com python, achei fantástico! Adorei! 

[]s


---
Você recebeu essa mensagem porque está inscrito no grupo &quo
Reply all
Reply to author
Forward
0 new messages