【发布时间】:2016-03-04 04:08:33
【问题描述】:
我正在学习递归并想将我的循环转换为递归函数?这段代码的正确答案应该是什么(假设我已经编写了翻转方法来反转数组中的元素)?谢谢,
/**
* Sorts an array of integers by repeatedly reversing
* subranges within the array. Prints the flip sequence.
*/
public static void sort( int[] array)
{
int size = array.length;
if (!Ordered(array, size)){
for(int i = size-1; i > 0; i--)
{
int j = findMax(array, 0, i );
int flipPosition;
if( j != i )
{
if( j != 0 ) {
flip( array, 0, j );
flipPosition = size-j;
System.out.print( flipPosition + " " );
}
flip( array, 0, i );
flipPosition = size-i;
System.out.print( flipPosition + " " );
}
}
}
System.out.println( 0 );
}
【问题讨论】:
-
你想使用什么排序算法?
-
@Logan 我的方法使用煎饼排序,它在翻转数组之前识别数组中的最大数字,并从左到右按升序对数字进行排序。不知道怎么修改成递归函数。
-
好递归不是在公园里散步。我主要用于排序的是一种称为快速排序的算法。我通过并找出我的“基本案例”是什么并从那里开始工作。
-
在我学习递归时对我有帮助的东西:隔离你的基本案例和你的行动。您必须将定义作为您的基础(“基础案例”)。您的定义允许您“退出”递归。在其他情况下,您执行一项操作并再次调用自己以继续执行一项操作,直到达到基本情况。
-
您想递归地解决NP-hard问题吗?