Направление с ошибкой в рекурсивной функции для получения факториала числа

Я написал следующий код для получения факториала данного числа. Будучи новичком к Сценарию оболочки, я использовал нормальную логику кода 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
задан 28 November 2014 в 14:51

1 ответ

Ну, bash не "C". Существует столько ошибок здесь, что, вероятно, необходимо читать хорошее учебное руководство на ударе, пишущем сценарий . Вы смешиваете имя переменной и значение, локальные и глобальные переменные, позиционные параметры, управляете оценкой, арифметическим выражением, логическими выражениями...

, В первую очередь, один совет: когда Вы не знаете то, что это происходит, используйте #! /bin/bash -xv в качестве первой строки. Это распечатает каждую строку перед выполнением и всеми подстановками переменных. Действительно неоценимо как средство отладки.

Затем, я добавляю рабочую версию сценария. Следите за Вами, это - быстрое и грязное редактирование, существует много эксперта по удару здесь, который сделает в тысячу раз лучший сценарий здесь.

#!/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

... анализ оставляют читателю;-)

1
ответ дан 11 November 2019 в 02:30

Другие вопросы по тегам:

Похожие вопросы: