【问题标题】:c++ recursion without if, or if related statements (switch, while, for, ?:, etc.) [closed]没有 if 或 if 相关语句的 c++ 递归(switch、while、for、?: 等)[关闭]
【发布时间】:2014-12-15 22:32:52
【问题描述】:

我需要在没有 if 或相关的情况下执行递归退出条件。需要说明的是,我只能使用基本语言。没有函数,没有函数指针,什么都没有。我只想递归调用 main() 方法(我知道这种方式很糟糕),但没有其他方法,我需要确定性地终止程序,因此尽管欢迎类似的 hacky 命题,但没有 stackoverflow 或该方向的任何东西。有什么想法吗?

编辑: 这些要求适用于 C++ JAPH。我想使用递归的原因是做一个循环(这也是不允许的)。具体要求如下:

  • 仅限基本变量声明
  • 仅方法/构造 sizeof()、getchar()、putchar()、printf()
  • 仅设置变量以及逻辑、算术和布尔运算符
  • 没有自声明的方法
  • 只有正常运行的代码

【问题讨论】:

  • 想解释一下为什么?拜托,我真的需要知道。不,你不能在 C++ 中调用 main
  • 这似乎是XY Problem
  • 陈述任意要求而不说明您的实际问题不会让您走得太远。
  • 这个问题似乎离题了,因为它太窄而不能被普遍使用。
  • 使用其他语言?也许是 C。

标签: c++ visual-c++ recursion conditional-statements


【解决方案1】:

我只想递归调用 main() 方法(我知道这种风格很糟糕)

不仅风格不好,而且标准明确禁止。你不能打电话给main()

要明确我只能使用基本语言

我不知道你所说的“基本语言”是什么意思——但我猜你不是指名为 BASIC 的语言。

我也不知道为什么你会在不使用if 之类的任何条件的情况下被限制实现递归,我能想到的唯一方法是通过模板元编程。

例子:

template <uint64_t N> uint64_t fact (); 

template <> uint64_t fact <1> ()
{
  return 1;
}

template <uint64_t N> uint64_t fact ()
{
  return N * fact <N-1>();
}

int main()
{
  uint64_t x = fact <3>();
  std::cout << x << "\n";
}

【讨论】:

  • ...我认为可以提出一个相当合理的论点,即模板元编程并不是真正的递归...当然,您可以有一些递归模板定义,但是当您的程序被编译时, 都已经解决了,所以你的程序真的和它没什么关系了...
  • @twalberg:是的,当然可以。
  • @twalberg 您可以使用继承来进行递归。我在这里创建了一个示例:ideone.com/NS4Hxh,取自 Scala 示例。
  • visual studio c++ 允许并编译 main 中的 main-call,尽管我知道 c++-standard 不允许这样做
  • @singinWhale 您的汽车还可以让您以 100 英里/小时的速度将其撞到墙上。一个工具可以让你做某事并不意味着这样做是个好主意。
猜你喜欢
  • 2014-09-30
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多