让我们说我定义一个简单的函数,它将显示传递给它的整数:
def funct1(param1):
print(param1)
return(param1)
Run Code Online (Sandbox Code Playgroud)
输出将是相同的,但我知道当return在函数中使用语句时,可以再次使用输出.否则,print不能使用语句的值.但我知道这不是正式的定义,任何人都能为我提供一个好的定义吗?
让我们来看看Knight Tour问题吧.可以转换为迭代吗?困扰我的是回溯部分.如何在循环中回溯?当我从递归到迭代时,是否必须使用堆栈数据结构来实现回溯?
我在这里以更好的方式问了这个问题:有人能通过代码描述一个回溯迭代而不是递归的实际例子吗?
def paren(n):
lst = ['(' for x in range(n)]
current_string = ''.join(lst)
solutions = list()
for i in range(len(current_string)+1):
close(current_string, n, i, solutions)
return solutions
def close(current_string, num_close_parens, index, solutions):
"""close parentheses recursively"""
if num_close_parens == 0:
if current_string not in solutions:
solutions.append(current_string)
return
new_str = current_string[:index] + ')' + current_string[index:]
if num_close_parens and is_valid(new_str[:index+1]):
return close(new_str, num_close_parens-1, index+1, solutions)
else:
return close(current_string, num_close_parens, index+1, solutions)
def is_valid(part):
"""True if number of open parens >= number of close parens in …Run Code Online (Sandbox Code Playgroud) 我正在学习python3.为了更多地考虑递归,我想实现一个函数comb(n,k),它返回一个由一组{1,2,...,n}中的kk元素的所有组合组成的列表.
我认为使用循环是不明智的,因为嵌套循环的数量取决于k.所以我认为它与递归.我尝试编写受这个问题启发的功能, 但我无法得到正确的答案.
def combinations(sub, data_set, index, still_needed):
if still_needed == 0:
return sub
for i in range(index, len(data_set)):
sub.append(data_set[i])
still_needed = still_needed - 1
return combinations(sub, data_set, index+1, still_needed)
def comb(n, k):
data_set = list(range(1, n+1))
print (combinations([], data_set, 0, k))
Run Code Online (Sandbox Code Playgroud)
如果我测试Comb(6,3),我只得到[1,2,3].我想获得所有组合.我的代码中有什么问题?还是重要的错过了?我只是想学习python的递归,这不是一个功课,谢谢.
期待的结果如下:
[[1, 5, 6],
[2, 5, 6],
[3, 5, 6],
[4, 5, 6],
[1, 4, 6],
[2, 4, 6],
[3, 4, 6],
[1, 3, 6],
[2, 3, 6],
[1, 2, 6],
[1, 4, …Run Code Online (Sandbox Code Playgroud)