A diferença entre recursão, iteração e programação dinâmica (versão fácil de entender) Tome a sequência de Fibonacci como exemplo

Primeiro apresente o problema clássico do algoritmo de Fibonacci:

Escreva uma função, digite n para encontrar o enésimo termo da sequência de Fibonacci. A definição da sequência de Fibonacci é a seguinte:

F (0) = 0, F (1) = 1
F (N) = F (N-1) + F (N-2), onde N> 1. A
sequência de Fibonacci começa com 0 e 1, e o seguinte O número de Fibonacci é obtido somando os dois números anteriores.

1. Recursão

Recursão é chamar a si mesmo, o que consome muito tempo e espaço. A maioria dos sites de limpeza de problemas não suporta o uso de recursão no problema de Fibonacci.

var fib = function(n) {
    if(n<2) return n
    return fib(n-1)+fib(n-2)
};

2. Programação dinâmica

A programação dinâmica pode ser entendida como etapas de salto de rã. Não importa quantas etapas sejam realizadas, as etapas de destino final são as mesmas, mas podem haver vários processos. A essência é o espaço para o tempo. Você pode ver que o método a seguir consome espaço de matriz n + 1

function fib(n){
    
    var arr=[0,1]
    for(let i=2;i<=n;i++){
        arr[i]=arr[i-1]+arr[i-2]
    }
    return arr[n]

}

3. Iteração 

Iteração é o processo de usar continuamente o valor antigo da variável para enviar o novo valor. Simplificando, a variável ainda é essa variável, ou seja, o valor está mudando constantemente. Entenda a iteração no projeto normal, ou no projeto, mas a função está mudando e melhorando constantemente. Cada vez mais perto dos requisitos finais. Você pode ver que o método a seguir muda constantemente os valores de primeiro, segundo e soma.

var fib = function(n) {
   if(n<=1) return n;
    var first=0,second=1;
    for(var i=2;i<=n;i++){
        var sum = first+second
        first=second;
        second=sum;
    }
    return sum;
};

 

Acho que você gosta

Origin blog.csdn.net/a1059526327/article/details/107861002
Recomendado
Clasificación