所以我需要使用递归方法编写代码来获取输入的子字符串,如果输入是:
,那么正确的例子就是" ABC"输出必须是:a ab abc b bc c
依旧...... 另一个例子:
输入:"你好"输出:赫尔,你好,你好,我爱你好 Ø
a=""
if len(s)==1:
return
for i in range(0,len(s)):
for n in range(0,len(s)):
a+=s[i:n+1]+'\n'
这是我编写的代码,它完全符合我的需要,唯一的缺点是它不使用任何递归,所以如果有人可以帮助我
答案 0 :(得分:1)
查看您的预期输出,该程序的摘要可能是:
a ab abc
)b bc c
)在Python-ish伪代码中:
def substrings(input):
output = substrings_using_first_char(input)
return output + substrings(input[1:])
substrings_using_first_char()
,我会留给你。它可以是递归的,但是使用for
循环有一个简单的非递归实现。您可以将递归版本编写为练习。
上面的代码存在问题,但是总是调用自身,所以它永远不会返回,并且会溢出堆栈。所有递归函数/方法都需要停止条件。所以放一个:
def substrings(input):
if(input == ''):
return []
else:
output = substrings_using_first_char(input)
return output + substrings(input[1:])
这符合递归函数/方法的通用格式:
recursiveMethod(input):
if(input is simple case with easy answer):
return answer for the simple case
else:
split input into a "small piece" and the "rest"
return answer made by working with "small piece" and
recursiveMethod(rest)
整个事情可以整理一下,删除中间变量:
def substrings(input):
if(input == ''):
return []
else:
return substrings_using_first_char(input) + substrings(input[1:])
我已经让它返回一个列表,而不是打印到屏幕上,因为这通常是一种更清晰的编码方式,但您可以根据自己的需要进行调整。
请注意,由于Python不优化尾递归,因此堆栈溢出在Python中始终存在风险。递归很有用(特别是在使用树时)但是当有一个明显的迭代解决方案时,在Python中通常最好使用它。
答案 1 :(得分:0)
检查一下:
public void test() {
String abc = "abcdef";
write(abc, 0, 0);
}
void write(String abc, int start, int end) {
System.out.println(abc.substring(start, end));
if (end == abc.length()) {
if (start < abc.length()) {
write(abc, start + 1, end);
}
} else {
write(abc, start, end + 1);
}
}
输出是:
a
ab
abc
abcd
abcde
abcdef
bcdef
cdef
def
ef
f