número de la columna c lenguaje -Fibonacci implementación recursiva

implementación recursiva de la sucesión de Fibonacci

  • En primer lugar para definir una serie de Fibonacci:
    serie de Fibonacci se refiere a las series A tales: 1,1,2,3,5,8,13,21,34, ...... En matemáticas, columnas de Fibonacci para ser como sigue el método de recursión se define: (. 1).... F. = 1, F. (2) = 1, F. (n-) = F. (. n-- 1) + F. (n-- 2) (n-≥ 3, n-∈ N *
    la serie de Fibonacci logrado en el programa es muy fácil, que es un algoritmo recursivo típica puede ser realista.
  • Tomemos una redacción común recursiva:
int fibo(int n)
{
        if(n == 1 || n == 2)
                return 1;
        return fibo(n-1)+fibo(n-2);

}
int main()
{
        int n,result;
        printf("请输入:");
        scanf("%d",&n);
        result = fibo(n);
        printf("%d\n",result);
}

código recursivo es simple, pero si no se hace algo de optimización, es propenso a desbordamiento de pila. O más de memoria-intensiva se logrará, porque cuando n> 2, la función fibo llama a sí mismo tiene que n-2 veces comenzaron a devolver un valor, a continuación, una por una vuelta a su abierta original y empezar a funcionar. Si el valor de n requerida es muy grande, puede ser necesario para salvar a cientos o miles de registros de llamadas, es propenso al error "desbordamiento de pila" (desbordamiento de pila).

  • Pero podemos hacer una pequeña aplicación más optimizada - recursión de cola
    mediante recursión de cola que, cuando se devuelve la función, las llamadas en sí misma, y, instrucción de retorno no puede contener expresiones. De esta manera, no importa cuántas veces, solamente ocupan un marco de pila, no se produce el compilador o intérprete que puede hacer para optimizar la recursión de cola, la llamada recursiva a sí misma situación de desbordamiento de pila.
    En general, ya que sólo hay un registro de llamada, nunca será ocurrió "desbordamiento de pila" de error.
    La función recursiva optimizado:
int fibo(int n,int i,int j)
{
        if(n ==1 || n ==2)
                return j;
        return fibo(n-1,j,j+i);
}

int main()
{
        int n,result;
        printf("请输入:");
        scanf("%d",&n);
        result = fibo(n,1,1);
        printf("%d\n",result);
}

Como resultado, cuando la función fibo llama a sí mismo, que comenzó a tener valor de retorno, no al final de un uno por uno recursivo y luego volver a los valores de devolución de funciones originales. aplicación recursiva de cola, el compilador nos puede ayudar a ahorrar una gran cantidad de consumo de memoria, mi madre ya no tienen que desbordamiento de pila!

Supongo que te gusta

Origin www.cnblogs.com/tansss/p/12509879.html
Recomendado
Clasificación