Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用Bash迭代计算Fibonacci数_Linux_Bash_Algorithm_Shell - Fatal编程技术网

Linux 使用Bash迭代计算Fibonacci数

Linux 使用Bash迭代计算Fibonacci数,linux,bash,algorithm,shell,Linux,Bash,Algorithm,Shell,是否可以编写一个脚本,以迭代方式计算第n个斐波那契数。我做了如下所示的递归操作,但可以迭代地找到解决方案。请帮忙 #!/bin/bash fib() { if [ $1 -le 0 ] then echo 0 return 0 fi if [ $1 -le 2 ] then echo 1 else a=$(fib $[$1-1]) b=$(fib $[$1-2]) echo $(($a+$b)) fi } 我不喜欢ba

是否可以编写一个脚本,以迭代方式计算第n个斐波那契数。我做了如下所示的递归操作,但可以迭代地找到解决方案。请帮忙

#!/bin/bash
fib()
{
  if [ $1 -le 0 ]
  then
    echo 0
    return 0
  fi
  if [ $1 -le 2 ]
  then
    echo 1
  else
    a=$(fib $[$1-1])
    b=$(fib $[$1-2])
    echo $(($a+$b))
  fi
}

我不喜欢bash,也不可能检查,但应该是这样的:

fib()
{
  if [ $1 -le 0 ]
  then
    echo 0
    return 0
  fi
  if [ $1 -le 2 ]
  then
    echo 1
  else
    a = 1
    b = 1
    for i in {2..$1}
    do
      c = $b;
      b = $a + $b;
      a = $c
    done
    echo $($b)
  fi
}
可能有一些拼写错误

对于java,它的工作原理如下:

public int fib(n){
    if(n <= 1) {
        return n;
    }
    int fib = 1;
    int prevFib = 1;

    for(int i=2; i<n; i++) {
        int temp = fib;
        fib+= prevFib;
        prevFib = temp;
    }
    return fib;
}

以下是迭代方法:

function fib() {
  local n=$1
  local x=0
  local prev1=0
  local prev2=0
  local cur=0
  for (( x = 1 ; x <= n ; x++ ))
  do
    if [[ $x == 1 || $x == 2 ]] ;  then
      prev1=1
      prev2=1
      cur=1
      continue
    fi
    cur=$(( prev1 + prev2 ))
    prev2=$prev1
    prev1=$cur
  done
  echo $cur
}

看看,如果你搜索短语斐波那契迭代法,你会找到比我们在这里的答案更好的解释它的资源。非常有效。非常感谢。对不起,我还不能给你投票/