c - 使用不带循环的递归在 C 中编写程序以获得所需的输出

标签 c arrays recursion

使用递归方法(即无循环)重写冒泡排序,以及在运行递归排序之前和之后打印出数组的打印数组函数。数组是:

int ary[] = { 19, 62, 45, 9, 4, 99, 82, 34, 59, 102 }

编写一个函数来读取命令行参数并处理两个开关:“-min”和“-max”。如果选择“-min”,则数组按从最小到最大的顺序排序。如果选择“-max”,则数组按从最大到最小的顺序排序。

使用名为 rsort.exe 的程序的发布版本从 Windows cmd 提示符生成输出。如果命令行上未提供参数,则打印出一条帮助消息,类似于以下内容:

用法:c:> rsort.exe WHERE -min [最小值到最大值],或 -max [最大值到最小值

来自评论的代码。

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

int main(void)
{
    int ary[] = { 19, 62, 45, 9, 4, 99, 82, 34, 59, 102 };
    int find_max(int *array,int max,int i);
    if (i>=0)
    {
        if (array[i]>array[max])
        {
            find_min(array,i,i-1);
        }
        find_min(array,max,i-1);
    }
    return max;
}

最佳答案

将发布我刚刚制作的快速且草率的递归冒泡排序。 find_max 进行升序排序。如果您想要降序排序,只需切换较低的值而不是较大的值即可。

每次调用 find_max 时,我都会打印 spos 只是为了给您提示工作的样子。

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


int find_max(int [], size_t, int, int);

int main(void)
{
  int ary[] = { 19, 62, 45, 9, 4, 99, 82, 34, 59, 102};

  find_max(ary, sizeof(ary)/sizeof(int), 0, 0);

  for(int i=0; i<sizeof(ary)/sizeof(int); i++)
    {
      printf("%d \n", ary[i]);
    }
  return 0;
}

int find_max(int numbers[], size_t len, int spos, int recurs)
{

  int temp_len = len - recurs;

  if(numbers[spos]>numbers[spos+1])
    {
      numbers[spos]^=numbers[spos+1];
      numbers[spos+1]^=numbers[spos];
      numbers[spos]^=numbers[spos+1];
    }

  printf("%d position \n", spos);

  if(recurs == (len-2))
    {
      return 0;
    }

  if(spos == (temp_len-2))
    {
      find_max(numbers, len, 0, recurs+1);
    }
  else
    {
      find_max(numbers, len, spos+1, recurs);
    }
}

关于c - 使用不带循环的递归在 C 中编写程序以获得所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381834/

相关文章:

javascript - 从数组中选择随机加权对象

c - 在 alpine 图像上构建 lua-openssl 时对 `strerror_s' 的 undefined reference

PHP 计数数组列

java - JSONArray在android中抛出内存异常

javascript - 使用递归组合数组值,即使它们是空的

sql - anchor 和成员具有并集的递归查询

c++ - 我在不使用指针的情况下得到 "Segmentation Fault"。怎么了?

c - 我怎样才能用c语言获得自1970年1月1日以来以毫秒为单位的UTCTime

无法将 int 数字转换为数组(在 C 中)以输出接下来的 10 个八进制数字

c - 为什么具有相同源和目标的 MoveFile 会随机失败?