求助:如何用无循环递归函数实现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
相关产品推荐
相关产品推荐

