当前位置: 首页 > 知识库问答 >
问题:

递归函数的数据类型无效,但出现错误

邢冷勋
2023-03-14

这是为了学校的工作。我们必须写一个十进制到八进制转换的程序。八进制转换的递归函数被给出为空deci_oct(int x)。当我试图调用它里面的函数并发送值n/8时,错误“此处不允许使用空类型”出现。问题要求递归函数的返回类型应该是空的。任何帮助都是非常感激的。

void deci_oct()
    {
        if(n > 0){
            int r=n%8;
            n/=8;
            deci_oct();
            oct =(oct * 10)+r;
        }

    }

共有2个答案

孟乐
2023-03-14

您可以使用Sytem.out.print()... flush()逐个数字打印结果数字,而不是在打印之前首先构造完整的数字(最初,问题中的代码使用S<-plhd--1/>()打印转换后的数字,大概是避免返回值,根据任务)。

也许“棘手”的一点应该是,你需要首先计算数字,然后调用其余数字的递归,然后打印以获得正确的数字顺序......

void deci_oct(int n) {
    if (n > 8) {
      deci_oct(n / 8);
    }
    System.out.print(n % 8);
    System.out.flush(); // might not be needed
}

p、 通常,人们会将值转换为字符串,并为此目的提交StringBuilder,以避免过度复制字符串

符棋
2023-03-14

你可以用一种简单的方式:

public static void main(String[] args) {
    StringBuilder builder = new StringBuilder();
    System.out.println(octal(210)); // 322
    octal(210, builder);
    System.out.println(builder.toString()); // 322
    octalVoid(210);// 322
}

示例1:使用生成器返回void类型。

static void octal(int value, StringBuilder builder) {
    if (value < 0) {
        octal(-value, builder);
    }
    if (value < 8) {
        builder.append(value);
    } else {
        octal(value / 8, builder);
        builder.append(value % 8);
    }
}

示例2:返回类型字符串。

static String octal(int value) {
    if (value < 0) {
        return "-" + octal(-value);
    }
    return value < 8 ? String.valueOf(value) : octal(value / 8) + value % 8;
}

示例3:返回带有打印的空白类型。

static void octalVoid(int value) {
    if (value < 0) {
        octal(-value);
    }
    if (value < 8) {
        System.out.print(value);
    } else {
        octalVoid(value / 8);
        System.out.print(value % 8);
    }
}
 类似资料:
  • 在F#中,我试图编写一个函数,给定两个字符串,它将返回第一个字符串中第二个字符串开头的所有索引。我的函数看起来像这样: 问题是在线

  • 我在Snowflake中创建了一个函数,其中包含两个“日期”参数: 我假设我错过了一些简单的东西。是否因为I已将参数声明为“日期”数据类型,而select语句将我的日期值归类为字符串? 提前致谢

  • 问题内容: 我使用以下代码解决了Euler项目的问题10,该代码通过强力工作: 这三个功能的工作方式如下: isPrime 检查数字是否为质数; primeList 返回一个列表,其中包含一组在一定范围内且限制为“ n”的素数,并且; sumPrimes 对列表中所有数字的值求和。(不需要最后一个功能,但是我喜欢它的清晰度,特别是对于像我这样的初学者。) 然后,我编写了一个新函数 primeLis

  • 我试着用拉库OOP写杨彦湛的拉库谜语比赛答案。Raku类系统非常直观,在我遇到递归函数之前,一切都很有魅力。这是类和函数的代码版本: 对于$tigers=4,函数给出: 另一方面,类总是陷入无限循环。我相信函数和类之间的区别在于这行代码: 我不清楚这是因为格式错误的递归语法还是函数和类之间类型约束的差异。

  • 使用以下代码: 为什么这个输出: 而不是我所期望的,那就是: 我讨厌递归。我讨厌递归。我讨厌递归。谢谢

  • 问题内容: 我是Go编程语言的新手,我有一个创建和解释器的任务,但是我遇到了以下问题: 我想将环境定义为: 但是我收到错误“无效的递归类型环境”。根据我的研究,我将父级更改为 Environment。但是现在,当我需要创建一个环境类型为var的新环境时,它会收到错误消息“无法将fun_Val.ds(环境类型)用作 环境值类型”。我正在如下创建环境: 我试图将这篇文章中的代码量限制在一定范围内,但是