【问题标题】:Bash recursive function not executing properlyBash递归函数未正确执行
【发布时间】:2021-12-11 11:04:09
【问题描述】:

我在这里定义了一个简单的factorial 递归函数。在num=5 之前它可以正常工作,但后来它开始提供垃圾值。我正在从用户那里读取num,然后将其输入到递归函数中。我无法弄清楚这个问题,因为我是 bash 算术方面的新手。

function fact {
    if (( $1==1 ))
    then
        return 1
    else
        prev=$(( $1-1 ))
        fact $prev
        prev_fact=$?
        this_fact=$( expr $1 \* $prev_fact )
        # this_fact=$(( $1 * $prev_fact )) This also works the same way as above
        return $this_fact
    fi
}

echo -n "Enter the number: "
read num
fact $num
val=$?
echo "Factorial of "$num" is "$val""

【问题讨论】:

    标签: bash recursion factorial


    【解决方案1】:

    返回代码限制在 0-255 范围内。这对fact 来说是个坏消息,因为任何大于5! = 120 的东西都会溢出。

    返回代码旨在用于表示成功和失败,而不是用于一般整数数据。要从函数中“返回”一个值,您应该将其回显到标准输出并在调用者中使用 $(...) 来捕获它。

    function fact {
        if (($1 == 1))
        then
            echo 1
        else
            prev=$(($1 - 1))
            prev_fact=$(fact "$prev")
            echo $(($1 * prev_fact))
        fi
    }
    

    【讨论】:

      【解决方案2】:

      或者只是使用这个变量 $var 来存储/打印数据

      fact(){
          (($1 > 1)) && {
               local prev=$(($1 - 1))
               fact $prev
               val=$(($1 * $val))
          } || val=1
      }
      
      read -p "Enter the number: " num
      fact $num
      echo "Factorial of '$num' is '$val'"
      

      【讨论】:

        猜你喜欢
        • 2023-01-20
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        • 2017-11-26
        • 2020-04-17
        相关资源
        最近更新 更多