java 递归问题
数据结构与算法分析的课后习题
编写带有下列声明的例程:
public void permute( String str );
private void permute( char [] str, int low, int high );
第一个例程是驱动程序,它调用第二个例程并显示String str中的字符的所有排列。如果str是"abc",那么输出的串则是abc,acb,bac,bca,cab和cba。第二个例程使用递归。
答案如下:
public class Permute
{
public void permute ( String str )
{
permute (str.toCharArray (), 0, str.length ());
String tmp = new StringBuilder ().append (str).reverse ().toString ();
permute (tmp.toCharArray (), 0, tmp.length ());
}
private void permute ( char[] str, int low, int high )
{
if (low == high)
{
return;
}
String result = "";
for ( int i = low; i < high; i++ )
{
result += str[i];
}
if (result.length () < str.length)
{
int count = str.length - result.length ();
for ( int i = 0; i < count; i++ )
{
result += str[i];
}
}
System.out.println (result);
permute (str, ++low, high);
}
public static void main ( String[] args )
{
Permute permute = new Permute ();
permute.permute ("abc");
}
}
上面的代码,虽然也是方法自己调用自身,但感觉permute (str, ++low, high);这样的调用其实用for循环就能写出来,这个应该不能算是递归吧,
求更好的递归解法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不能算递归,尾递归就不是递归了?
递归和循环等价
参考1: https://www.zhihu.com/question/20418254
参考2: https://www.zhihu.com/question/29373492
递归和循环本质是都是多次执行,是可以互相替代的,只是递归是另外一种思想,你的代码是递归
但是,你的代码没办法完成的题目中说的结果,递归思想有问题,没有得出全部结果,一个长度为n的个字符不重复的字符串有n!种排列这个应该都知道吧,你可以执行adcd是无法出来24种结果的。下面是我刚才写的一个递归,没仔细查,可能有不对的,map主要是用来去重的
改为迭代试试,java的递归默认好像就2万多次