我正在函数内部运行一个函数,但无法获取返回的正确值。
a = ['123', '132', '231', '213', '312', '321']
u = a[0]
a.remove(u)
def sp(x,y):
b = len(x.copy())
for i in range (0,len(x)):
if y[-2:] == x[i][0:2]:
y = y + x[i][2]
x.remove(x[i])
break
if b > len(x):
sp(x,y)
else:
print(y)
return y
使用sp(a,u)
print(y)给我我想要的东西,但返回y却没有。我知道y也是函数的原始输入,因此它只是返回原始输入,但是我不知道如何编写不同的代码,所以我得到的返回结果与print(y)相同。
答案 0 :(得分:1)
您的递归函数似乎有点错误 尝试更改此内容:
if b > len(x):
sp(x,y)
对此
if b > len(x):
y = sp(x,y)
答案 1 :(得分:0)
我尝试给出一些一般性答案。
您的函数是递归函数。这意味着您可以在内部调用相同的函数。一个简单的示例是教师功能。在递归函数中,您总是需要一个条件来停止递归。
def faculty(num):
if num <= 1:
return 1
else:
return faculty(num-1) * num
我认为您在理解print
和return
语句之间的区别时遇到问题。
打印:您将一些文本打印到控制台,以便用户可以看到。对于PC,此信息完全不相关。此功能之外,它无法使用打印到控制台的信息。
返回:这是调用函数时返回的值。
我认为这个小例子可以帮助您
def get_something():
number = 5
return number
x = get_something()
print(x) # In the console: 5
def print_something():
number = 5
print(number) # in the console: 5
v = print_something()
print(v) # in the console: None
# because the function didn't return anything (or to be precise: retured implicitly None)
如果您仔细研究递归的工作原理。例如,在https://medium.freecodecamp.org/how-recursion-works-explained-with-flowcharts-and-a-video-de61f40cb7f9,您会注意到,您需要在代码中更改以下内容。正如评论中已经提到的那样:
return sp(x,y)
答案 2 :(得分:0)
这样吧:
def sp(x,y):
b = len(x.copy())
if b > len(x):
for i in range (0,len(x)):
if y[-2:] == x[i][0:2]:
y = y + x[i][2]
x.remove(x[i])
break
return y #returns the calculated y
else:
return y #returns original y
print(sp(x, y))