【问题标题】:write a program in c using recursion with no loops to get the desired output使用没有循环的递归在c中编写程序以获得所需的输出
【发布时间】:2017-11-19 20:47:25
【问题描述】:

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

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

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

使用名为 rsort.exe 的程序的发布版本从 Windows cmd 提示符生成输出。如果命令行中没有提供参数,打印出一条帮助信息,类似如下:

用法:c:> rsort.exe WHERE -min [min to max] 或 -max [max to min

评论中的代码。

#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;
}

【问题讨论】:

  • 我卡住了,我的输出让我感到困惑
  • 这个程序需要是c语言而不是c++ 谢谢
  • 您应该在问题中包含可以格式化的代码,而不是在不能格式化的 cmets 中。这次我替你做了;请以后自己做。现在清理 cmets。 C 标签说你想要 C 而不是 C++。
  • 你不应该在其他函数中声明函数(更不用说定义它们——在这里可能不是问题,但 GCC 默认允许这样做,有时人们会被抓住)。您没有显示find_max() 的定义。您没有显示iarraymax 的声明。实际上,您似乎尝试将find_max() 的定义嵌套在main() 中,但是您在声明的末尾使用了;(因此它是一个声明)而不是{这将使它成为一个嵌套定义——坏、坏、坏!
  • 您需要查看max 在函数中是如何分配新值的(目前还没有)。

标签: c arrays recursion


【解决方案1】:

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

每次调用 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2022-09-23
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多