Программа, которая находит номер, о котором вы думаете, работает неправильно, что не так?

#c

Вопрос:

У меня возникли проблемы с этим рекурсивным кодом. В принципе, я хочу, чтобы компьютер «угадал» как можно меньшими шагами число, о котором я думаю. Однако все работает, кроме конечного результата. Границы в порядке, и это сужает предположение, пока оно не спросит меня, является ли число, о котором я думаю, скажем, 16, если я введу»=», оно должно вывести 16, вместо этого оно всегда выводит 50. Кто-нибудь может помочь мне найти ошибку?

 #include lt;iostreamgt; #include lt;cmathgt; #include lt;stringgt;  using namespace std;  unsigned int search (unsigned int boundInf, unsigned int boundSup);  int main () {  int b;  b = search (1, 100);   cout lt;lt; "Your number must be : " lt;lt; b lt;lt; endl; }  unsigned int search (unsigned int boundInf, unsigned int boundSup) {  string magnitude;  int b;  b = (boundSup   boundInf) / 2;    cout lt;lt; "Is your number lt;, gt; or = to " lt;lt; b lt;lt; "? ";  cin gt;gt; magnitude;   if (magnitude == "lt;") {  cout lt;lt; "Between " lt;lt; boundInf lt;lt; " and " lt;lt; b lt;lt; endl;  search (boundInf, b);  }  else if (magnitude == "gt;") {  cout lt;lt; "Between " lt;lt; b lt;lt; " and " lt;lt; boundSup lt;lt; endl;  search (b, boundSup);  }    return b; }   

Комментарии:

1. Вы этого не return search(boundInf, b); делаете и return search(b, boundSup); (или b = search(boundInf, b); и b = search(b, boundSup); ), поэтому функция всегда будет возвращать b результат, вычисленный вами при первом вызове. Голосование за закрытие как опечатка.

2. Рекурсивные функции работают точно так же, как и нерекурсивные функции. Если вы не сохраняете значение, возвращаемое при вызовах функций, оно исчезает.

3. Ваш код занимает слишком много времени, поэтому я придумал новый номер.

Ответ №1:

Вы забыли изменить значение b , когда углубляетесь в рекурсивную функцию, это можно легко исправить, изменив search функцию следующим образом:

 unsigned int search(unsigned int boundInf, unsigned int boundSup) {  string magnitude;  int b;  b = (boundSup   boundInf) / 2;  cout lt;lt; "Is your number lt;, gt; or = to " lt;lt; b lt;lt; "? ";  cin gt;gt; magnitude;   if (magnitude == "lt;")  {  cout lt;lt; "Between " lt;lt; boundInf lt;lt; " and " lt;lt; b lt;lt; endl;  b = search(boundInf, b);  }  else if (magnitude == "gt;")  {  cout lt;lt; "Between " lt;lt; b lt;lt; " and " lt;lt; boundSup lt;lt; endl;  b = search(b, boundSup);  }   return b; }  

Комментарии:

1. Привет, спасибо, теперь, когда я запускаю программу, она все еще продолжает повторяться, даже после того, как угадала число, и я ввел»=», как я могу добавить способ вырваться из цикла?

2. Я изменил только то, что показал выше, и программа завершается правильно, так что, возможно, вы изменили что-то еще, если бы вы могли поделиться своим текущим кодом, я более чем рад помочь.

3. Спасибо за вашу помощь, я только что добавил еще одно предложение if, когда я ввожу»=», и оно завершается правильно, большое вам спасибо!