旋转函数,使用C中的递归,将数组和整数作为输入

时间:2019-07-03 02:53:14

标签: c recursion

第一次发布,如果我的问题没有遵循准则,我很抱歉,但是欢迎对我的问题和发布问题的任何反馈意见:)!

我正在研究一个问题,该问题要求编写一个带有两个参数的递归void函数:一个数组和一个整数计数n,该函数将数组中的前n个整数向左旋转。

所以输入看起来像这样:

5 10 20 30 40 50

输出:

50 40 30 20 10

我使用递归编写了rotate函数,它似乎按预期工作。

#include <stdio.h>

void rotateLeft(int y[], int n){

   int temp;
   if (n > 1){
      temp = y[0];
      y[0] = y[1];
      y[1] = temp;
      rotateLeft(y + 1, n - 1);
   }
}

int main(void){

   int y[5];
   int n;
   int i = 0;

   //input number from user
   printf("Enter 'Count' number and 'elements' into array: ");
   scanf("%d", &n);
   for (i = 0; i < 5; i++){
      scanf("%d", &y[i]);
   }

   rotateLeft(y, n);

   for ( size_t i = 0; i < sizeof( y ) / sizeof( *y ); i++ ) printf( "%d ", y[i] );
    puts( "" );

   return 0;
}

我正在使用Visual Code Studio,尝试运行此代码时遇到两个问题。第一个是它从不要求我输入,它只会在指定的数组位置输出随机数,例如: 3345345 345456 564565 56 4564

其他时候代码只是运行并且永不停止,我不得不强迫它停止。

在这一点上,我碰壁了,很肯定,问题出在我的主要职责范围之内,但是我想去哪里碰壁。在过去的五年中,我没有编码经验,所以我非常不习惯。

感谢您的帮助和指导!

2 个答案:

答案 0 :(得分:0)

使用v-model.number="mAlarmValue"编译时答案中的代码可以正常工作(并输入gcc小于或等于5,否则n方法将超出数组限制)。

由于使用rotateLeft的标准输入似乎无法正常工作,因此可能是与程序的构建方式有关的问题(它可能应该是Win32或Win64子系统:控制台应用程序,链接:{{ 3}})。

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
//recursion 
//a b c d e
//round-1
//e b c d a
//round-2
//e d c b a
void Rec_ReverseAr(int y[], int n,int max_n){
   int temp;
   if (max_n > n*2){
      temp = y[max_n-n-1];
      y[max_n-n-1] = y[n];
      y[n] = temp;
      Rec_ReverseAr(y, n+1,max_n);
   }
}
//inplace
void Better_ReverseAr(int y[],int max_n){
    int Upper=max_n/2,i,temp;
    for (i = 0; i < Upper; i++){
        temp = y[max_n-i-1];
        y[max_n-i-1] = y[i];
        y[i] = temp;
    }
}


int main(){

    int *y;
    int n;
    int i = 0;

    //input number from user
    printf("Enter 'Count' number and 'elements' into array: ");
    scanf("%d", &n);
    if(n<1){//prevent nagtive int
        printf("Hey You Enter Wrong Number!\n");
        return 0;
    }
    y=(int*)malloc(sizeof(int)*n);//alloc amount n of int for y
    for (i = 0; i < n; i++){
        scanf("%d", &y[i]);
    }

    Rec_ReverseAr(y,0,n);
    //Better_ReverseAr(y,n);
    for (i = 0; i < n; i++ ){
        printf( "%d ", y[i] );
    }



    free(y);//release memory of y

    return 0;
}

您在这里

your function
void rotateLeft(int y[], int n){

   int temp;
   if (n > 1){
      temp = y[0];
      y[0] = y[1];
      y[1] = temp;
      rotateLeft(y + 1, n - 1);
   }
}

0.a b c d e f
1.*b a* c d e f
2.b *c a* d e f
3.b c *d a* e f
...
is wrong