#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, когда я ввожу»=», и оно завершается правильно, большое вам спасибо!