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

前端 未结 13 2086
别那么骄傲
别那么骄傲 2021-02-14 03:24

In shell scripting how to find factorial of a number?

相关标签:
13条回答
  • 2021-02-14 03:40
    seq -s "*" 1 500 |bc
    
    0 讨论(0)
  • 2021-02-14 03:41

    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
    
    0 讨论(0)
  • 2021-02-14 03:42

    You have to use loop, see this link: http://ubuntuforums.org/showthread.php?t=1349272

    0 讨论(0)
  • 2021-02-14 03:42
    seq -s* `dd`|bc
    

    I believe this is the shortest way of accomplishing the task.

    0 讨论(0)
  • 2021-02-14 03:43

    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.

    0 讨论(0)
  • 2021-02-14 03:45

    10! in bash:

    f=1; for k in {1..10}; do f=$[$k * $f] ; done; echo $f
    

    or here in a step by step fashion:

    $ t=$(echo {1..10})
    $ echo $t
    1 2 3 4 5 6 7 8 9 10
    $ t=${t// /*}
    $ echo $t
    1*2*3*4*5*6*7*8*9*10
    $ echo $[$t]
    3628800
    
    0 讨论(0)
提交回复
热议问题