Я был вовлечен в вызов.Рекурсивная функция не соответствует всем путям
Вот вопрос Дано:
Этот вопрос включает в себя игру с мишками. Игра начинается, когда я получаю несколько медведей. Затем вы можете вернуть некоторых медведей, но вы должны следовать этим правилам (где n - количество медведей, которые у вас есть):
Если n равно, то вы можете вернуть ровно n/2 медведей. Если n равно , делящимся на 3 или 4, вы можете умножить последние две цифры n и вернуть это много медведей. (Кстати, последняя цифра n равна n% 10, а следующая-последняя цифра равна ((n% 100)/10). Если n делится на 5, то вы можете вернуть точно 42 . медведи цель игры состоит в том, чтобы итоге РОВНО 42 медведей
Например, предположим, что вы начинаете с 250 медведей Тогда вы могли бы сделать эти шаги:..
--start 250 медведей .
--Since 250 делится на 5, вы можете вернуть 42 медведей, оставив вас с 208 медведей.
- Так как 208 даже, вы можете вернуть половину медведей, оставив вас с 104 медведями.
- Поскольку ровно, вы можете вернуть половину медведей, оставив вас с 52 медведями.
- Поскольку 52 делится на 4, вы можете умножить последние две цифры (в результате получится 10) и вернуть эти 10 медведей. Это дает вам 42 медведей.
- Вы достигли цели!
Написать рекурсивную функцию для удовлетворения этой спецификации:
bool bears(int n) // Postcondition: A true return value means that it is possible to win // the bear game by starting with n bears. A false return value means that // it is not possible to win the bear game by starting with n bears. // Examples: // bear(250) is true (as shown above) // bear(42) is true // bear(84) is true // bear(53) is false // bear(41) is false
Подсказка: Для того, чтобы проверить, является ли п четно, используя выражение ((п% 2) == 0) ,
Вот мое решение но unfortinately всегда возвращает ложь. Я предполагаю, что это не соответствует целым альтернативным путям, но понятия не имеет. Кстати, я очень новичок в VB. Заранее спасибо.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MsgBox(bear(Int(TextBox1.Text)))
End Sub
Public Function bear(bc As Integer) As Boolean
Dim way1, way2, way3 As Integer
If bc = 42 Then
Return True
ElseIf bc < 42 Then
Return False
ElseIf (bc Mod 2 = 0) Or (bc Mod 3 = 0) Or (bc Mod 4 = 0) Or (bc Mod 5 = 0) Then
If (bc Mod 2 = 0) Then
way1 = bear(bc/2)
End If
If (bc Mod 3 = 0) Or (bc Mod 4 = 0) Then
way2 = bear((bc Mod 10) * ((bc Mod 100)/10))
End If
If (bc Mod 5 = 0) Then
way3 = bear(bc - 42)
End If
If (way1 Or way2 Or way3) Then
Return True
Else
Return False
End If
Else
Return False
End If
End Function
'bc' является единственным« встречным счетчиком »' i, и я не сохраняю на нем никакой ценности, кроме как отправить его в 'bear()'. Потому что я только забочусь **, если он может достичь 42 или нет **. Поэтому мне не нужно возвращать числа и отправлять их обратно в 'bear()'. Как я могу это исправить? – Mustafa