【问题标题】:Fibonacci sequence calculator斐波那契数列计算器
【发布时间】:2019-05-14 18:45:02
【问题描述】:

我的一些作业有问题,所以基本上我们被要求创建一个 bash 脚本,它接受一个大于 2 的变量并返回相同数量的斐波那契数列,i.o.如果我给 5 它会打印: 0 1 1 2 3 我已经做了一些研究,并提出了一个我在网上任何地方都没有真正看到过的独特想法,(请记住,我有一些 python 经验)但我遇到了一个问题,所以基本上我在 bash 和 2 中使用 for 表达式变量来计算序列,我首先手动将它们设置为 0 和 1(序列中的第一个和第二个数字),然后在更改它们的值的同时将它们相加,

所以这里是代码:

#!/bin/bash
a=0
b=1
for i in $(seq 1 $1);
do
  if ["$a" -gt "$b"]
  then 
    b=($a +$b)
    echo "$b"
  else
    a=($a +$b)
    echo $a
  fi
done

我有很多问题,希望完全脱离上下文,但我希望你能得到大致的想法,并能帮助指导我解决问题:/ 似乎我希望将某些内容视为数字,但将其视为文本...虽然不确定,但非常感谢任何帮助

【问题讨论】:

标签: linux bash


【解决方案1】:

你们非常接近,一些小的语法变化和新的初始值使它起作用。

注意事项:

  • 空格在 bash 中很重要,特别是对于特殊字符 [ ] ;
  • 此外,可以使用 let 强制使用整数进行计算

使用比较来仅使用两个变量进行计算是个好主意:)

#!/bin/bash - 
a=1
b=0
echo $a
for i in $(seq 1 $1);
do
    if [ $a -gt $b ] ; then
        let b=($a +$b)
        echo $b
    else
        let a=($a +$b)
        echo $a
    fi
done

【讨论】:

    【解决方案2】:

    bash 中有一个算术上下文。

    稍微改写即可

    $ a=0; b=1; 
      for i in {1..9}; 
      do c=$((a+b)); 
         echo $c; 
         if ((a>b)); then b=$c; else a=$c; fi; 
      done
    
    1
    2
    3
    5
    8
    13
    21
    34
    55
    

    【讨论】:

      【解决方案3】:

      你需要一个空间

      if [ "$a" -gt "$b" ]
      

      您可以使用

      进行算术评估
      b=$((a+b))
      

      脚本运行后,验证结果是否符合您的预期(即是否打印 0?)

      【讨论】:

        【解决方案4】:

        使用双括号来计算算术表达式。而不是:

        if [ "$a" -gt "$b" ]
        

        写:

        if ((a > b))
        

        而不是:

        ($a + $b)
        

        写:

        $((a + b))
        

        你也可以这样写for标头:

        for ((i = 0; i < $1; i++))
        

        但在这种情况下,这不是必需的。然后你的循环变成:

        for ((i = 0; i < $1; i++)); do
            if ((a > b)); then
                b=$((a + b))
                echo "$b"
            else
                a=$((a + b))
                echo "$a"
            fi
        done
        

        【讨论】:

          【解决方案5】:
          #!/bin/bash
          a=0  
          b=1
          echo $a
          c=$1
          for i in $(seq 1 $((c-1)));
          do
              if [ $a -gt $b ]; then
                  b=$((a+b))
                  echo $b
              else
                  a=$((a+b))
                  echo $a
              fi
          done
          

          【讨论】:

            猜你喜欢
            • 2020-01-18
            • 2017-07-22
            • 2013-03-31
            • 2013-08-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多