Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Bash 迭代解中的递归解_Bash_Recursion_Iteration - Fatal编程技术网

Bash 迭代解中的递归解

Bash 迭代解中的递归解,bash,recursion,iteration,Bash,Recursion,Iteration,我当时正在编写一个bash脚本,以使cd'ing到Dropbox文件夹(我在其中存储uni的课程作业)更容易。我决定使用参数,将我直接放入文件夹中,保存数周,或者父目录或包含所有参考资料的目录。我还决定使用递归验证输入(最初我通过将递归语句放在do while循环中创建了一个无限循环)。代码如下: #!/bin.bash #changes to ~/Dropbox/UCP120/ function recurCall () { echo "Invalid input: $arg1 doe

我当时正在编写一个bash脚本,以使cd'ing到Dropbox文件夹(我在其中存储uni的课程作业)更容易。我决定使用参数,将我直接放入文件夹中,保存数周,或者父目录或包含所有参考资料的目录。我还决定使用递归验证输入(最初我通过将递归语句放在do while循环中创建了一个无限循环)。代码如下:

#!/bin.bash
#changes to ~/Dropbox/UCP120/

function recurCall () {
   echo "Invalid input: $arg1 does not exist."
   echo "Enter a valid input"
   read inputLoop 
   validateInput $inputLoop
}

function validateInput() {
   arg1="$1"
   reference="r"

##snip##

   ##if DIR is !null but non-existent loop and ask for input   
   elif [[ ! -d .../UCP120/"$arg1"/ || ! -d .../UCP120/Week\"$arg1"/ ]]; then     
      recurCall $arg1
      ##Recursive solutions don't require iterative control structures.
      #while [[ snip (see if above) ]]; do
        #   recurCall $arg1
        #done
   fi
}

##Call the function. Get this ball rolling
validateInput $1
我的问题是:

  • 我真的很幸运吗?还是我设计得相当好
  • 递归是现实世界中可行的解决方案吗?还是在学习练习之外毫无用处
  • 在迭代中是否有过像我考虑不周的原始尝试那样的递归应用程序
  • 我该如何改进这一点
  • 谢谢,如果我问了一个不恰当的问题,我道歉。然而,我希望互联网以其丰富的经验能够帮助我和我对这些概念的理解

    编辑:删除validateInput中的if-then语句。交换函数名,因为它们以这种方式更有意义。删除了希望减轻屏幕宽度的条件

    编辑:缩短目录路径以进一步减轻屏幕宽度

  • 只要不通过输入成千上万的无效输入来耗尽shell的堆栈空间,这就可以工作
  • 既然有效,它是可行的。然而,我发现它比while循环更难掌握,我更喜欢后者;但这可能是品味的问题
  • 当然,在迭代中也有递归应用程序,但不像这里,从递归返回后,迭代永远不会继续
  • 避免递归