递归函数或非递归函数,不使用2 **方法

时间:2013-08-11 22:51:40

标签: python python-3.x

您好我正在处理一个问题并且不确定我是否已正确完成,因为我没有完全按照提示进行操作,因为我认为它错了并使用+代替x。这是个问题:

编写一个包含递归函数的程序,该函数返回2n,对于任何整数nn ≥ 0。 (提示:2n = 2 * 2n-1n > 0。(你也可以尝试非递归地执行此操作)。询问用户数字n并返回适当的值。不要使用2 ** n方法。

这就是我写的:

def main():
    x = int(input("Please enter a value for x: "))
    print("The answer is: ", times2(x))
def times2(n):
   result = 0
   while n:
       result += 2
       n -= 1
   return result
main()

它基本上将每个输入乘以2,我不确定这是否正确并且不确定我是否正确地阅读了这个问题...请帮忙!

3 个答案:

答案 0 :(得分:3)

从字面上理解你的问题:

def double(n, stop_recursion=False):
    if stop_recursion:
        return n
    else:
        return double(2 * n, stop_recursion=True)

它自称吗?是的,所以它是递归的

是否使用2 ** n?否

答案 1 :(得分:1)

您似乎想要2**n ...

因此,您可以这样做:

def power2(n):
    if n == 0: return 1
    return 2 * power2(n - 1)

它是递归的,因为它调用自身,不会逐字地使用2**n,并且适用于任何你想要的大于0的数字。

答案 2 :(得分:1)

对于适用于任何数字A的任何数字A的电源功能:

def a_power_b(a, b):
    if b > 0:
        return a_power_b(a, b - 1) * a
    elif b < 0:
        return a_power_b(a, b + 1) / a
    else:
        return 1

此外,如果您确实以递归方式进行乘法运算,则可以使用:

def a_times_b(a, b):
    if b > 0:
        return a_times_b(a, b - 1) + a
    elif b < 0:
        return a_times_b(a, b + 1) - a
    else:
        return 0