首页 > 解决方案 > 使用递归反转数组

问题描述

当我尝试运行它时,它要求我输入 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) 

请帮忙

标签: cxcode

解决方案


试试这个:

#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而不是访问最后一个元素length


推荐阅读