Tu ne peux pas utiliser « return » pour retourner la valeur de ta fonction recursive. « return » ne peut retourner que des valeurs comprises entre 0 et 255. C'est fait pour retourner un return code (success ou echec), pas une valeur destinee a etre traitee.
Si tu veux absolument faire une fonction recursive, « echo » la valeur calculee par ta fonction. Tu peux faire un truc du genre :
#!/bin/sh
fact() {
n=$1
if [ $n -eq 0 ]
then
echo 1
else
echo $(( n * `fact $(( n - 1 ))` ))
fi
}
echo `fact $1`
|
Ah et puis un autre truc : la syntaxe « $(( $var - 1 )) » que tu utilise n'est pas bonne. La bonne syntaxe est « $(( var - 1 )) ». La difference est subtile : dans le prenier cas $var est interpolle avant d'evaluer l'expression. Dans le deuxieme cas var est interpolle quand l'expression est evaluee. Dans le premier cas tu auras une erreur de syntaxe si var est vide (car bash essaira de calculer « $(( - 1 )) », ce qui ne veut rien dire). En particulier si tu utilises la premiere forme (pas bonne), tu auras systematiquement une erreur si tu execute ton script en mode « validation » (ou bash verifie la syntaxe du script sans l'executer).
Message édité par matafan le 25-10-2003 à 20:37:05