如何使用迭代而不是递归来编写以下函数?
function mystery(b)
{
if b == 0 then
return 0
if (b / 2 == 0)
return mystery (b-1) + 3
else
return mystery (b-1) + 2
}
答案 0 :(得分:0)
我假设当您执行b / 2 == 0时,您正在检查数字b是偶数还是奇数,否则只有在b = 0,1的情况下才是正确的。
递归函数
def mystery(b):
if b == 0:
return 0
if b % 2 == 0:#check if b is even
return mystery(b-1)+3
else: return mystery(b-1)+ 2
迭代函数
def mystery_iter(b):
result= 0
while b > 0:
if b % 2 == 0:#check if b is even
result += 3
b= b-1
else:
result += 2
b= b-1
return result
答案 1 :(得分:0)
至少有两个人建议您将递归重新制定为循环。相反,我建议您先尝试了解函数的功能的 mathematics ,然后再考虑将隐式递归循环展开为显式迭代循环。在这种情况下,您会得到一个更简单的答案:
def mystery(b):
if b == 0:
return 0
if b % 2 == 0:
return b // 2 * 5
return b // 2 * 5 + 2
如果需要的话,可以在代码方面进一步减少,有可能减少为一种。 (就像@AkhileshPandey一样,我假设(b / 2 == 0)
中的除法应该是模运算(b % 2 == 0)
)上面的示例是Python 3,因为尚不清楚OP使用哪种语言,由于then
的使用不一致,给定的代码将以所述语言正确运行。