You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用无循环递归函数实现C语言double数组反转?

实现double类型数组的递归反转

嘿,你已经把int数组的递归反转玩明白了,要转成double类型其实没那么复杂,核心逻辑完全可以复用,只需要针对数据类型做几处调整就行。我来一步步给你说清楚:

关键修改点

  • 函数定义与变量类型:把原函数里的int x[]改成double x[],交换用的临时变量temp也要从int换成double
  • 输入输出格式符:scanf读取double要用%lf,printf输出可以用%lf或者%f(严格来说scanf必须用%lf,printf两者都兼容)
  • 数组声明:主函数里的数组类型从int改为double

完整的double版本代码

#include <stdio.h>
#include <stdlib.h>

// 修改参数为double数组,临时变量类型同步更新
void ArrayReverse(double x[], int N) {
    if (N <= 1) {
        return;
    } else {
        double temp;
        int j = 0;
        temp = x[j];
        x[j] = x[N-1];
        x[N-1] = temp;
        ArrayReverse(&x[1], N-2); // 递归逻辑完全不变
    }
}

int main(int argc, char *argv[]) {
    int num_of_el;
    int i;
    printf("enter the number of elements of the array: \n");
    scanf("%d", &num_of_el);
    
    double arr[num_of_el]; // 数组类型改为double
    double element; // 存储输入元素的变量同步更新
    int k,l;
    
    printf("enter the elements one by one: \n");
    for(i=0;i <= num_of_el - 1; i++) {
        scanf("%lf", &element); // 格式符从%d改为%lf
        arr[i] = element;
    }
    
    printf("原数组:");
    for(l=0;l <= num_of_el - 1; l++) {
        printf("%lf ", arr[l]); // 输出格式符改为%lf
    }
    printf("\n");
    
    ArrayReverse(arr, num_of_el);
    
    printf("反转后数组:");
    for(k=0;k <= num_of_el - 1; k++) {
        printf("%lf ", arr[k]); // 同步修改输出格式符
    }
    return 0;
}

为什么递归部分不用改?

你的递归逻辑是交换首尾元素,然后递归处理去掉首尾的子数组,这个逻辑和数组存储的元素类型完全无关——不管是int还是double,交换元素的操作只是把对应内存位置的值互换,递归的终止条件(数组长度<=1时返回)也不受数据类型影响,所以这部分完全可以原封不动保留。

测试一下这个代码,比如输入3,再输入1.5 2.7 3.9,就能看到正常的反转结果啦~

内容的提问来源于stack exchange,提问作者user7179505

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:57:55