4 回答
TA贡献1874条经验 获得超12个赞
当你有递归时,你通常会以某种方式组合返回值。可以是总和,例如斐波那契数列:
fibonacci(n+1) = fibonnaci(n)+fibonacci(n-1)
或将一条线附加到矩阵,就像您的情况一样。反正没有回报就没有信息可以结合!考虑没有回报的斐波那契案例:
def fibonnaci(n):
if n<2:
return 1
fib_ans = fibonnaci(n-2)+fibonnaci(n-1)
在这种情况下,如果我调用fibonnaci(0)或fibonnaci(1)输出将是 1,就像您在 idx == numRows 时返回 ans,但是如果我调用fibonnaci(2),则变量 fib_ans 将收到 2,这是预期的答案,但它可以在函数的范围。Python“将添加”return None到我函数的末尾,就在 fib_ans 属性的下方。所以,我需要返回 fib_ans
TA贡献1833条经验 获得超4个赞
当你这样做时pascal([1],arr,idx+1),你正在进行递归调用,但随后丢弃它返回的值。如果要将其返回给调用者,则需要显式使用return pascal(...).
事实上,递归在这个例子中是没有必要的。您可以轻松地重构您的代码以使用一个简单的for循环。例如:
def pascal(numRows):
ans = [[1]]
for _ in range(1, numRows):
pre = ans[-1]
arr = [1]
for i in range(0,len(pre)-1,1):
arr+=[pre[i]+pre[i+1]]
arr+=[1]
ans.append(arr)
return ans
print(pascal(5))
(根据惯例,我在这里使用名称_作为循环变量,因为它是一个不在循环内使用的虚拟变量,但您可以使用其他名称,例如,如果您愿意的话。)forrow
上面的代码尽可能接近原始代码,但您还应该考虑使用arr.append(value)代替arr += [value]——这是将单个值附加到列表的正常方法。
TA贡献1807条经验 获得超9个赞
对于所有具有关键字的算法语言,return它完全退出最近的函数,其结果是返回参数的表达式的结果。例如。
def test(v):
if v == 0:
return someFun(10)
...
如果v为零,则函数的结果是 返回的值someFun(10)。由 ... 表示的函数的其余部分永远不会执行,除非v是非零值。
如果我们不写相同的return:
def test(v):
if v == 0:
someFun(10)
...
现在, when vis zerosomeFun(10)仍然被调用,但是它返回的值被丢弃,为了让它具有任何真正的意义,someFun需要做一些副作用,比如打印、存储值、更新对象。此外,所有由 ... 表示的功能的其余部分在someFun(10)完成后继续。
return对于 Python 和许多其他语言来说,根本没有 a并不意味着它不返回任何东西。在 Python 中,return None每个函数/方法的最后一行都有一个不可见的。
添加回答
举报