반복 - 루비
7803 단어 rubybraziliandevsrails
되풀이?
다시 정의할 수 있는 방법을 찾고 있습니다. Ou seja, quando uma função chama a si própria. Alguns exemplos bem comuns são os algoritmos da Sequência de Fibonacci e Calculo Fatorial.
Vamos ver alguns의 예:
1 - Somando os numeros de um array com 반복
Neste Exemplo iremos somar todos os numeros de um array utilizando Recursividade. Dado um array de numeros inteiros, vamos somar todos os itens e retornar o valor da soma.
def recursive_sum(numbers)
if numbers.size <= 1
numbers[0]
else
numbers.slice!(0) + recursive_sum(numbers)
end
# Poderíamos fazer de forma ternaria:
# numbers.size <= 1 ? numbers[0] : numbers.slice!(0) + recursive_sum(numbers)
end
Aqui fiz apenas uma verificação pra saber se o tamanho do array recebido é menor ou igual a 1, caso seja, retorne o Primeiro e único item do array. Caso o tamanho do array seja maior que 1, retorne uma soma do primeiro item do array mais uma nova chamada do método
recursive_sum
.Então, pra entender melhor, vamos analisar o que acontece aqui utilizando um exemplo de um array [1, 2].
numbers = [1, 2]
recursive_sum(numbers)
# => 3
Naprimeira vez que o método for executado, o array possui 2 itens, 1 e 2. Ou seja, aprimeira condição será falsa e irá cair no
else
Porter Mais de um 아이템.Nessa condição eu executo um
slice!(0)
, que por sua vez remove o Primeiro item do array, no caso o número 1 e chamo novamente a função soma_array, então algo como:1 + soma_array([2])
E agora ao ser executada o array possui apenas um item, então a função retorna o numero 2, voltando ao contexto da primeira chamada da função:
`1 + 2
=> 3`
A mesma coisa acontece caso o array possua vários itens.
2 - 페이토리얼(n!)
Fatorial é um número natural inteiro positivo, o qual é Representativeado por n!
O fatorial de um número é calculado pela multiplicação desse número por todos os seus antecessores até chegar ao número 1. Note que nesses produtos, o zero (0) é excluído.
O fatorial é Representativeado por:
n! = n . (n – 1) . (n – 2) . (n – 3)!
Sabendo agora um pouco sobre fatorial, vamos escrever um metodo que execute isso de forma recursiva.
def factorial(number)
if number == 1
1
else
number * factorial(number - 1)
end
# number == 1 ? 1 : number * factorial(number - 1)
end
Então se utilizarmos o número 3 como parametro, teremos o seguinte:
factorial(3)
# => 6
Como nosso argumento é 3, 계산법 계산:
(3 * (3-1)) * (2-1)
3 - 시퀀시아 데 피보나치
Sequência de Fibonacci é a sequência numérica proposta pelo matemático Leonardo Pisa, mais conhecido como 피보나치:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Foi a partir de um problema criado por ele que o mesmo detectou a existência de uma regularidade matemática.
A sequência é definida mediante a seguinte formula:
Fn = Fn - 1 + Fn - 2
Trata-se do exemplo classico dos coelhos, em que Fibonacci descreve o crescimento de uma população desses animais.
Então, vamos criar esse ultimo exemplo em Ruby, lembrando que existem várias maneiras de transformar esses conceitos em codigo.
def fib(number)
return number if number < 2
fib(number-1) + fib(number-2)
# number <= 1 ? number : fib(number - 1) + fib(number - 2)
end
Podemos ver que a condicional analisa se o número recebido é menor que 2, caso positivo, será retornado o próprio número, caso não, faça uma soma utilizando a mesma função a prime part 1 number, 2 como descrito na fórmula da sequência de Fibonnaci.
Então se utilizarmos o número 6 como parametro, teremos o seguinte:
fib(6)
# => 8
예를 들어, 계산적 계산을 수행할 수 있습니다. Se passarmos como parametro um número muito grande, por exemplo 11.000, provavelmente teremos um problema de estouro de pilha.
Para resolver este problema e conseguirmos executar o método de forma recursiva podemos usar como estratégia o TCO (Tail Call Optimization)
, para saber mais a respeito eu escrevi este .
결론
Como vimos a recursão é algo bastante prático e basstante útil. E o caminho para entender melhor e dominar é a prática. Em breve teremos mais conteúdos e códigos usando este recurso.
연락:
이메일: [email protected]
링크드인:
Github: https://github.com/dnovais
Reference
이 문제에 관하여(반복 - 루비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/dnovais/recursao-ruby-35gi
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
n! = n . (n – 1) . (n – 2) . (n – 3)!
def factorial(number)
if number == 1
1
else
number * factorial(number - 1)
end
# number == 1 ? 1 : number * factorial(number - 1)
end
factorial(3)
# => 6
(3 * (3-1)) * (2-1)
def fib(number)
return number if number < 2
fib(number-1) + fib(number-2)
# number <= 1 ? number : fib(number - 1) + fib(number - 2)
end
fib(6)
# => 8
Reference
이 문제에 관하여(반복 - 루비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dnovais/recursao-ruby-35gi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)