如何使用迭代而不是递归来编写以下函数?

时间:2018-08-31 16:11:08

标签: recursion iteration

如何使用迭代而不是递归来编写以下函数?

function mystery(b)
{
    if b == 0 then 
       return 0 
    if (b / 2 == 0)
       return mystery (b-1) + 3
    else 
       return mystery (b-1) + 2
}

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的使用不一致,给定的代码将以所述语言正确运行。