Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you find the factorial of a number in a Bash script?

Tags:

bash

In shell scripting how to find factorial of a number?

like image 695
user409345 Avatar asked Aug 03 '10 07:08

user409345


People also ask

How do you find the factorial of a number in logic?

Factorial of a positive integer (number) is the sum of multiplication of all the integers smaller than that positive integer. For example, factorial of 5 is 5 * 4 * 3 * 2 * 1 which equals to 120.


2 Answers

You don't do it in bash. Intelligent people don't try to cut down trees with a fish, so my advice is to try and use the right tool for the job.

You can use, for example, bc to do it thus:

pax> echo 'define f(x) {if (x>1){return x*f(x-1)};return 1}
           f(6)' | bc
720
pax> echo 'define f(x) {if (x>1){return x*f(x-1)};return 1}
           f(500)' | BC_LINE_LENGTH=99999 bc
12201368259911100687012387854230469262535743428031928421924135883858
45373153881997605496447502203281863013616477148203584163378722078177
20048078520515932928547790757193933060377296085908627042917454788242
49127263443056701732707694610628023104526442188787894657547771498634
94367781037644274033827365397471386477878495438489595537537990423241
06127132698432774571554630997720278101456108118837370953101635632443
29870295638966289116589747695720879269288712817800702651745077684107
19624390394322536422605234945850129918571501248706961568141625359056
69342381300885624924689156412677565448188650659384795177536089400574
52389403357984763639449053130623237490664450488246650759467358620746
37925184200459369692981022263971952597190945217823331756934581508552
33282076282002340262690789834245171200620771464097945611612762914595
12372299133401695523638509428855920187274337951730145863575708283557
80158735432768888680120399882384702151467605445407663535984174430480
12893831389688163948746965881750450692636533817505547812864000000000
00000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000
like image 56
paxdiablo Avatar answered Sep 28 '22 05:09

paxdiablo


Here is a recursive function in Bash:

factorial () { 
    if (($1 == 1))
    then
        echo 1
        return
    else
        echo $(( $( factorial $(($1 - 1)) ) * $1 ))
    fi
}

Of course it's quite slow and limited.

like image 45
Dennis Williamson Avatar answered Sep 28 '22 05:09

Dennis Williamson