arrays - C语言中的反向数组
问题描述
它是一个反向数组程序,但是程序的输出出错了,它没有反转所有数字我已经干运行了这段代码,但没有找到问题所在?
#include <stdio.h>
void reverseArray(int ar[], int start, int end)
{
while (start < end)
{ ar[start] = ar[start] + ar[end];
ar[end] = ar[start] - ar[end];
ar[start] = ar[start] - ar[end];
start += 1;
end -= 1;
reverseArray(ar, start, end);
}
}
void main()
{
int ar[5] = {1, 2, 3, 4, 5};
reverseArray(ar, 0, 4);
for (int i = 0; i < 5; i++)
{
printf("%d ", ar[i]);
}
}
输出为:5 2 3 4 1
我发现控制进入while循环3次但根据条件它应该只运行循环2次
解决方案
您正在将循环与递归混合在一起。递归地,您反转数组的子部分并使用循环再次反转它。只有最外面的元素保持交换。
顺便说一句,像这样的交换可能会发生溢出,从而导致未定义的行为。
推荐阅读
- ajax - JSF/PrimeFaces:基于选择的可见性
- apache-spark - persist(StorageLevel.MEMORY_AND_DISK) 如何在 Spark 3.1 中使用 Java 实现
- python - 如何在python中导入文件?
- python - 从一个目录到另一个目录查找
- jenkins - groovy:: java.lang.IllegalArgumentException: 预期命名参数但得到
- laravel - Laravel 使用关系过滤查询结果
- excel - 从特定联系人(发件人)和 Outlook 中不同收件箱地址的电子邮件中提取 pdf 文件
- javascript - 如何使用 InAppBrowser react-native (android) 防止重复使用先前会话的 cookie
- plpgsql - 语法高亮 plpgsql 函数的工具
- php - PHP Post变量保持为空