перевернуть массив с рекурсией - PullRequest
0 голосов
/ 17 апреля 2019

Когда я пытаюсь запустить это, он просит меня ввести 11 цифр вместо 10, и это действительно странно, тогда это выглядит как еще более странный результат, пожалуйста, помогите.

void function(int array[],int length,int start)
{
    if (length<start)
    {
        return;
    }
    int temp=array[start];
    array[start]=array[length];
    array[length]=temp;
    function(array,length-1,start+1);
}

int main()
{
    int array[10],num=0,num2=10;
    printf("enter the array:\n");
    for (int i =0; i<num2; i++)
    {
        scanf("%d\n",&array[i]);
    }
    function(array,num2,num);
    for (int t = 0; t<num2; t++)
    {
        printf("%d\n",array[t]);
    }
}

тогда это выход для массива 1,2 ... 10,11

enter the array:
1
2
3
4
5
6
7
8
9
10
11

return
214696143
10
9
8
7
6
5
4
3
2
(lldb) 

помогите пожалуйста

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Последний индекс массива с размером 10 на самом деле равен 9. Итак, эта строка:

function(array,num2,num);

Должно быть:

function(array,num2-1,num);

Кроме того, вы используете scanf неправильно. Удалите символ \n. Подробнее о scanf здесь: http://www.cplusplus.com/reference/cstdio/scanf/

Я исправил ваш код и протестировал его здесь: https://onlinegdb.com/B1Yy4yBqN

0 голосов
/ 17 апреля 2019

Попробуйте это:

#include <stdio.h>

void function(int array[],int start, int end)
{
    if (start < end)
    {
      int temp;
      temp = array[start];
      array[start] = array[end];
      array[end] = temp;
      function(array, start+1, end-1);
    }
}

int main()
{
    int array[10],num=0,num2=10;
    printf("enter the array:\n");
    for (int i =0; i<num2; i++)
    {
        scanf("%d",&array[i]);
    }
    function(array,num,num2 - 1);
    for (int t = 0; t<num2; t++)
    {
        printf("%d\n",array[t]);
    }
}

Обратите внимание, что в C массив начинается с 0. Последний индекс - 9, а не 10. Вам нужно получить доступ к последнему элементу, используя length - 1 вместо * 1005.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...