免责声明:这是一种练习,但不是作业。
现在,我们开始。练习要求将通用数组向左旋转,将第一个元素放在最后一个位置,然后递归进行。我的想法:
这是我写的正确的轮换:
void moveArrayRight (int array[], int dim){
if(dim!=1){
int holder;
holder = array[dim-1];
array[dim-1]=array[dim-2];
array[dim-2]=holder;
moveArrayRight(array, dim-1);
}
}
问题是:我不能(我认为)对左手使用相同的技术。我可以添加另一个参数(从技术上讲,我可以使用任何我想使用的参数),但是我对此深深地不喜欢。如果可能的话,我只想保留两个参数。我还想做一些类似的事情,例如使用数组的最后一个元素存储下一个单元格中要存储的内容,但是我主要由于以下原因不知道如何实现它:我不知道如何保留原始元素数组的维数。
有什么想法,提示或类似的东西吗?
void rotate_left( int a[], size_t n )
{
if ( n > 1 )
{
int tmp = a[0];
a[0] = a[1];
a[1] = tmp;
rotate_left( a + 1, n - 1 );
}
}
这是函数用法的一个例子
#include <stdio.h>
void rotate_left( int a[], size_t n )
{
if ( n > 1 )
{
int tmp = a[0];
a[0] = a[1];
a[1] = tmp;
rotate_left( a + 1, n - 1 );
}
}
int main( void )
{
int a[] = { 1, 2, 3, 4, 5 };
for ( size_t i = 0; i < sizeof( a ) / sizeof( *a ); i++ ) printf( "%d ", a[i] );
puts( "" );
rotate_left( a, 5 );
for ( size_t i = 0; i < sizeof( a ) / sizeof( *a ); i++ ) printf( "%d ", a[i] );
puts( "" );
return 0;
}
输出是
1 2 3 4 5
2 3 4 5 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句