面临递归函数中推导数字阶乘的错误

面临递归函数中推导数字阶乘的错误

我编写了以下代码来导出给定数字的阶乘。作为 Shellscript 的新手,我使用了递归函数的普通 C 代码逻辑。

#!/bin/bash
#This script will do factorial of a give number
echo "<<--------MENU----------->>"
echo "We will do a factorial"
echo "Enter the number"
 read num
 echo "You entred " $num
 fact()      #Function to calculate factorial of the given number
    {
        if  (num -eq 0)
            then    
        echo "1"
        elif (num -lt 0)
        then
        echo "Negative number can not be factorialed"
        else
        return fact*fact (n-1)
        fi
          }

        fact $num

        echo "The result is :" $fact(num)

执行期间我收到以下错误:

<<--------MENU----------->>

We will do a factorial

Enter the number

4

You entred  4
fact.sh: 20: fact.sh: Syntax error: "(" unexpected (expecting "fi")

答案1

嗯,bash不是“C”。这里有很多错误,你可能需要读一读一个关于 Bash 脚本的优秀教程。您可以混合变量名称和值、局部和全局变量、位置参数、命令评估、算术表达式、逻辑表达式……

首先一个建议:当你不知道发生了什么时,使用#! /bin/bash -xv作为第一行。这将在执行之前打印每一行,以及所有变量替换。作为调试工具,它真的非常有用。

接下来,我添加了一个可运行的脚本版本。请注意,这是一个快速而粗糙的编辑,这里有很多 bash 专家可以编写出比这里好一千倍的脚本。

#!/bin/bash
#This script will do factorial of a give number
fact()      #Function to calculate factorial of the given number
{
    local a
    if  [[ $1 -eq 0 ]]
    then    
        echo "1"
    elif [[ $1 -lt 0 ]]
    then
        echo "You can't take the factorial of a negative number"
    else
        a=$(fact $(($1 - 1)) )
        echo $(( $1 * $a ))
    fi
}
# main
echo "<<--------MENU----------->>"
echo "We will do a factorial"
echo "Enter the number"
read num
echo "You entred " $num

echo "The result is :" $(fact $num)

看:

[romano:~/tmp] % ./test.sh
<<--------MENU----------->>
We will do a factorial
Enter the number
4
You entred  4
The result is : 24

现在有一个有点令人惊奇的事情:

<<--------MENU----------->>
We will do a factorial
Enter the number
22
You entred  22
The result is : -1250660718674968576

...分析留给读者;-)

相关内容