#!/bin/bash
function factorial()
{
if (( $1 < 2 ))
then
echo 1
else
echo $(( $1 * $(factorial $(( $1 - 1 ))) ))
fi
}
Это будет работать лучше.
(В любом случае, он работает до 25, что должно быть достаточно, чтобы доказать смысл рекурсии.)
Для больших чисел bc будет инструментом для использования, сделав девятую строку выше:
echo "$1 * $(factorial $(( $1 - 1 )))" | bc
но вы должны быть немного осторожнее с bc -
$ factorial 260
38301958608361692351174979856044918752795567523090969601913008174806\
51475135399533485285838275429773913773383359294010103333339344249624\
06009974551133984962615380298039823284896547262282019684886083204957\
95233137023276627601257325925519566220247124751398891221069403193240\
41688318583612166708334763727216738353107304842707002261430265483385\
20637683911007815690066342722080690052836580858013635214371395680329\
58941156051513954932674117091883540235576934400000000000000000000000\
00000000000000000000000000000000000000000
было очень тяжело для моей бедной системы!