我的 Python 代码有什么问题(模拟 POW(x,y))



我正在练习递归,并尝试模拟pow(x,y)。

下面是我的代码:
def power(x,y):
    for y in range(1,y):
        return x * power(x,y)

why it got:

力量(2、3)回溯(最近一次调用):文件",第1行功率(2、3)文件"C:/Python34/1.py",第3行,在power中返回x * power(x,y)TypeError:不支持*:'int'和'NoneType'的操作数类型

你似乎把迭代和递归混在了一起。

你也有一个令人困惑的变量阴影与y

这是一个纯递归解:

def power(x,y):
    if y == 0: return 1
    return x * power(x, y-1)

这是一个纯迭代解:

def power(x,y):
    v = 1
    for i in range(0,y):
       v *= x
    return v

表达式range(1,1)是一个空集。

如果给for循环一个空集合,您将跳过return语句。

如果跳过return语句,函数将返回None

第一次递归调用y=1函数,触发第一个条件。

注:这并不是你的程序唯一的问题。

当函数跳过(或完成)for循环时,它以默认值None结束它的工作
所以有时候你用return x * None代替return x * power(x,y)

你的函数适用于Python,如

def power(x,y):
    for y in range(1,y):
        return x * power(x,y)
    return None

BTW:在for循环中使用return是没有意义的。第一个return将完成for循环。

return X表示end function at once and return value X

y等于1时,则函数返回None

最新更新