2013-07-23 3 views
1

Я писал сценарий bash, чтобы сделать cd'ing в папку Dropbox (где я храню курсовую работу для uni) проще. Я решил взять параметры, чтобы поместить меня прямо в папки на определенные недели, или родительский каталог или каталог со всеми моими справочными материалами. Я также решил проверить вход с помощью рекурсии (изначально я создал бесконечный цикл, поместив рекурсивный оператор в цикл while 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. Как я могу улучшить это?

Благодарю вас, извините, если я задал неправильный вопрос. Однако я надеюсь, что Интернет с его обширным опытом поможет мне и моему пониманию этих концепций.

Редактировать: удалить, если инструкция then в validateInput. Меняются имена функций, поскольку они имеют больше смысла таким образом. Удалено, хотя условия, мы надеемся, уменьшаем ширину экрана.

Редактировать: Сокращенный путь к каталогу, чтобы уменьшить ширину экрана даже больше.

ответ

0
  1. Это должно работать до тех пор, пока вы не исчерпаете пространство стека оболочки, введя тысячи и тысячи недействительных входов.
  2. Поскольку это работает, оно жизнеспособно. Однако мне сложнее понять, чем цикл while, и предпочитаю последнее; но это может быть вопросом вкуса.
  3. Конечно, есть приложения для рекурсии внутри итерации, но не здесь, где итерация никогда не продолжается после возврата из рекурсии.
  4. Воздержитесь от рекурсии. ;-)
Смежные вопросы