2017-01-02 3 views
1
public boolean q0() { 

    if(word[0] != 'a') { 
     System.err.println("Word not accepted!"); 
     System.exit(0); 
    } 

    if(word.length-1 > cont && word[cont] == 'a') { 
     cont++; 
     return q0(); 
    } 
    else if(word[cont] == 'b') { 
     q1(); 
    } 

    return false; 
} 

Мой код работает нормально. Но я должен быть уверен, что это на самом деле рекурсия.Рассматривается ли это как рекурсия?

+0

Да, почему, как вы думаете, это не так? – Mritunjay

+0

Да, любая функция, вызывающая себя, называется рекурсивной функцией. Независимо от того, вызван ли он только для одного случая ... –

+0

Рекурсия сама по себе вызывает метод e. В вашем случае вы вызываете метод 'q0' внутри определения' q0'. Итак, вы используете рекурсию –

ответ

2

Это технически рекурсивный, да, так как q0() называет себя.

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

Это:

cont++; 
return q0(); 

стал бы это:

return q0(cont + 1); 

Кроме того, эта отрасль является необычным:

else if(word[cont] == 'b'){ 
    q1(); 
} 

Если это будет return q1();? Я предполагаю, что вы намерены перенаправить возвращаемое значение q1. Или у q1() действительно есть побочные эффекты? Если это последний, это огромный запах кода.

Смежные вопросы