我正在练习递归,并尝试模拟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