def recursive_insert(arr)
return arr if arr.size<=1
recursive_insert(arr[0,arr.size-1])
i=arr.size-1
while arr[i-1]>arr[i] and i>0
arr[i],arr[i-1] = arr[i-1],arr[i]
i-=1
end
arr
end
arr=[5,4,3,2,6,1]
x=recursive_insert(arr)
puts x.inspect
这不起作用。我怀疑Ruby有一个引用传递机制,它阻止我的arr
变量为每个递归调用更新。
我该如何解决这个问题?我在Ruby中编写递归函数有很多困难。
答案 0 :(得分:2)
此:
arr[0, arr.size - 1]
返回arr
部分内容的副本,对该副本的更改不会反映在arr
中。因此,您的递归步骤没有任何用处,您的方法与此相同:
def recursive_insert(arr)
return arr if arr.size<=1
i=arr.size-1
while arr[i-1]>arr[i] and i>0
arr[i],arr[i-1] = arr[i-1],arr[i]
i-=1
end
arr
end
并且在正确的位置得到1,这就是全部。
答案 1 :(得分:-1)
void insertInOrder( int * a , int start ,int element)
{
if(start < 0)
{
a[start + 1] = element;
return;
}
else
{
if(element < a[start])
{
a[start+ 1] = a[start];
insertInOrder(a,start-1,element);
}
else
a[start + 1] = element;
}
}
void recursiveInsertionSort(int * a , int start , int end)
{
if(start >= end)
return;
else
{
insertInOrder(a,start,a[start+1]);
recursiveInsertionSort(a,start+1,end);
}
}
void main()
{
const int SIZE = 5;
int a[SIZE] = {9,8,7,6,10};
recursiveInsertionSort(a,0,SIZE-1);
for(int i = 0 ; i < SIZE ; i++)
{
cout<<a[i]<<" ";
}
}
这是c ++中插入排序的递归实现