• [^] # Re: Suite de fibonacci en bash:

    Posté par . En réponse à la dépêche Bash 5 : une introduction. Évalué à 10. Dernière modification le 05 août 2022 à 20:30.

    Amusant. Bien que pratiquant le Bash fréquemment, je dois avouer avoir dû consulter le man pour le comprendre.

    SPOILER ALERT:

    a est donc un tableau contenant 4 éléments.
    a[0] --> 'a[a[n]=a[n-1]+a[n-2],n++/94]'
    a[1] --> 2
    a[2] --> 0
    a[3] --> 1

    Pour un tableau X, la syntaxe ${X[@]:i} permet d'obtenir les éléments à partir de l'indice i soit X[i] X[i+1] ...

    Ici, i correspond à l'expression n=4,a qui est alors évaluée en mode ARITHMETIQUE.

    Comme en C, l'opérateur , permet d'évaluer plusieurs expressions et retourne la valeur de la dernière. Ici, on a donc n=4 puis le résultat final a.

    Or, en Bash, une référence simple à un tableau retourne son premier élément.

    L'indice 'i' est donc équivalent à

    i --> n=4, a[a[n]=a[n-1]+a[n-2],n++/94]

    Comme n++/94 est équivalent à n=n+1, n/94 on a donc

    a[0] --> a[a[n]=a[n-1]+a[n-2],n++/94]

    a[0] --> a[a[n]=a[n-1]+a[n-2],n=n+1,n/94]

    a[0] --> a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]

    Et l'indice i est donc évalué comme

    i --> n=4, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
    i --> n=4, a[4]=a[3]+a[2], n=5, a[5/94]
    i --> n=4, a[4]=a[3]+a[2], n=5, a[0]

    On remplace alors a[0] par sa valeur pour obtenir

    i --> n=4, a[4]=a[3]+a[2], n=5, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
    i --> n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[6/94]
    i --> n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[0]

    Le même processus récursif se poursuit jusqu'à ce que n soit égal à 94 et donc que a[n/94] devienne a[1].

    L'indice i est donc évalué comme

    i --> n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, ... , a[93]=a[92]+a[91], n=94, a[1]

    La valeur finale de l'indice i est donc a[1] = 2 et le résultat final ${a[@]:i} = a[2] a[3] ... a[93], la suite de Fibonacci.