#!/bin/bash
function factorial()
{
if (($1 < 2))
then
echo 1
else
echo $(($1 * $(factorial $(($1 - 1)))))
fi
}
Este funcionará mejor
(Funciona hasta 25, de todos modos, que debería ser suficiente para probar el punto sobre la recursividad.)
Para los números más altos, BC sería la herramienta a utilizar, por lo que la novena línea anterior:
echo "$1 * $(factorial $(($1 - 1)))" | bc
pero hay que ser un poco cuidadoso con BC -
$ factorial 260
38301958608361692351174979856044918752795567523090969601913008174806\
51475135399533485285838275429773913773383359294010103333339344249624\
06009974551133984962615380298039823284896547262282019684886083204957\
95233137023276627601257325925519566220247124751398891221069403193240\
41688318583612166708334763727216738353107304842707002261430265483385\
20637683911007815690066342722080690052836580858013635214371395680329\
58941156051513954932674117091883540235576934400000000000000000000000\
00000000000000000000000000000000000000000
era del todo una tensión en mi pobre sistema!
Los códigos de retorno son un byte único, por lo que se rompe para n> 5. Para solucionar esto, deberá cambiar la función para repetir un resultado, en lugar de s et un código de retorno. – tripleee
+1 y +9000 a @tripleee. Las funciones en bash deben hacer eco de los resultados, no devolverlos. – Sorpigal
La sintaxis '$ [...]' ha quedado obsoleta durante décadas. Deja de usarlo. – geirha