迭代解决方案中的递归解决方案

时间:2013-07-23 14:52:14

标签: bash recursion iteration

我正在写一个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

我的问题是:

  1. 我只是幸运吗?或者我设法把它设计得相当好?
  2. 递归是一个真实可行的解决方案吗?或者在学习练习之外没用?
  3. 在迭代中是否有一个真实世界的递归应用程序,就像我原先想到的原始尝试一样?
  4. 我该如何改进?
  5. 谢谢,如果我问了一个不恰当的问题,我道歉。但是,我希望拥有丰富经验的互联网可以帮助我和我对这些概念的理解。

    编辑:如果然后在validateInput中删除语句。交换函数名称,因为它们以这种方式更有意义。在条件下移除希望缓解屏幕宽度。

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

1 个答案:

答案 0 :(得分:0)

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