斐波那契数列计算器

时间:2019-05-14 18:45:02

标签: linux bash

我在做一些作业时遇到了问题,因此,基本上,我们被要求创建一个bash脚本,该脚本需要一个大于2的变量,并返回相同数量的斐波那契序列号,即。如果我给5,它将打印: 0 1 1 2 3 我已经进行了一些研究,并提出了一个独特的想法,我实际上并没有在网上看到任何东西,(请记住,我在python方面有一些经验),但是我遇到了一个问题,所以基本上我在bash和2中使用了一个表达式变量以计算序列,我首先手动将它们设置为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

我有很多问题,希望完全脱离上下文,但我希望您能有一个一般的想法,并可以帮助指导我解决问题:/ 似乎我希望将某些内容视为数字,但将其视为文本...不确定,但是任何帮助都将受到高度赞赏

5 个答案:

答案 0 :(得分:0)

您非常亲密,一些小的语法更改和新的初始值使其起作用。

注意:

  • 空白在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

答案 1 :(得分:0)

bash中有一个算术上下文。

可以稍微重写

<!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Untitled Document</title>
    <script>
    	function myFunction(){
    		var fn = document.getElementById("f1").value;
    		var des = document.getElementById("t1").value;
    		var fDiv = document.getElementById("d2"); //fDiv stands for "Form Div"
    		var hDiv = document.getElementById("d1"); // hDiv stands for "Hidden Div"
        
        hDiv.style.display = "block";
    		document.getElementById("fn1").innerHTML = fn;
    		document.getElementById("t2").innerHTML = des;
        fDiv.style.display = "none";
        
    	}
    </script>
    </head>

    <body>
    <div name="form" id="d2" class="d2">
      <form>
      First Name: <input type="text" name="fn" id="f1" /><br /><br />
      Description: <textarea id="t1" rows="5" cols="20"></textarea><br /><br />
      <input type="button" name="b1" id="b1" value="Add" onclick="myFunction()"  />
      <input type="button" name="b1" id="b2" value="Cancel" onclick="Cancel()"  />
      </form>
    </div>

    <div name="hidden" id="d1" class="d1">
    	<p><span id="fn1"></span></p>
    	<p><span id="t2"></span></p>
    </div>

    </body>
    </html>

答案 2 :(得分:0)

您需要一个空格

$ 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

您可以使用

进行算术评估
if [ "$a" -gt "$b" ]

一旦脚本运行,请验证结果是否符合您的期望(即打印0吗?)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

使用双括号来评估算术表达式。代替:

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