【问题标题】:Double Recursion in C language [closed]C语言中的双重递归[关闭]
【发布时间】:2021-10-25 14:47:38
【问题描述】:

我的导师告诉我,他会在 C 编程考试中加入双重递归。我以前从未听说过或想象过递归中的递归。它是否像在循环类型的逻辑中带有循环的二维数组?你们能帮我解释一下这个概念或一个例子吗?我在其他网站上找不到任何东西。 谢谢!

EDiT:更新双递归的含义。就像for循环中的for循环一样,问题如下;

Q) 打印图案 1/1! + 2/2! + 3/3! + 4/4! + ... + n/n!并使用递归找到分子和分母。我如何做到这一点是通过从用户那里获取一些模式并将其传递给分子的递归,其中“i”增加到“n”。然后在分子递归中,因子的分母递归开始,所以“rec=rec*i”直到 I

#include<stdio.h>
int numerator(int,int);
int denominator(int,int);
int main()
{
    int n=0, i=1;
    printf("Please enter the last number of your series : ");
    scanf("%d", &n);
    numerator(i,n);
}
numerator(i,n)
{
    int d=1;
    if (i<=n)
    {
        if (i==n)
        {
            printf(" %d/%d",i,denominator(d,i));
        }
        else
        {
            printf(" %d/%d +",i,denominator(d,i));
            i++;
            numerator(i,n);
        }
        
    }
    else
    {
        return 0;
    }
}
denominator(int d,int i)
{
    if (i==1)
    {
        return d;
    }
    else
    {
        d=d*i;
        i--;
        denominator(d,i);
    }
}

【问题讨论】:

  • 我也从未听说过。也许他指的是mutual recursion
  • 或者也许是双重递归调用,例如一个树搜索函数,它进行两次递归调用来探索二叉树的两个分支;或者比如一个糟糕的斐波那契实现,它对 fib(n-1) 和 fib(n-2) 进行了两次递归调用。
  • 或者如果这是理论课:Theoretical Computer Science concept called "double recursion"。但我对此表示高度怀疑,因为这与 C 编程课程没有太大关系。
  • 你的导师说的是“递归中的递归”还是你猜的?它似乎与正常的“递归”没有什么不同。无论如何,对于“几个 StackOverflow 用户还没有听说过双重递归”,您应该可以询问(看起来毫无头绪)您的导师进行澄清,或者至少确认/反驳上面 cmets 中的猜测。
  • 欢迎来到 SO!我会问你的导师他们的意思。

标签: c recursion


【解决方案1】:

“双重递归”是俚语,因为它不是特定类型递归的标准名称。它可能描述的可能的标准递归术语包括:

  1. 相互递归,其中f(x) -&gt; t(...) and t(x) -&gt; f(...) 使得一个递归调用在经过第二个函数后进入相同的函数。这对于工具制造者来说是困难的,因为这意味着他们需要对函数实现进行跟踪分析,以查看是否存在任何循环。

  2. 将递归调用的第二个实例作为参数的递归调用。 f(x, f(x)) 是一个示例,f(f(x)) 或任何其他嵌套也是如此。

  3. 一个递归调用(由于问题的限制)只需要评估两次。 f(x) = x + f(x-1), (if x&gt;0) or x (if x&lt;=0) 是评估 f(2) 时的示例。

  4. 使用 C 类型 double 的递归调用 - 这是一种愚蠢的可能性,但有时当老师试图解释测试内容而不涉及太多细节时,这只是一个糟糕的单词选择问题.

  5. 一个函数可能会在其递归过程中调用自己两次 - 这可能类似于 f(x) = f(x-1) + f(x-2)

如果可以的话,我会联系老师并要求提供双重递归的非测试示例,或者教科书的哪一页(如果您正在使用)讨论了双重递归。好老师很乐意在他们的办公时间帮助学生学习一个项目,即使它以前在课堂上讲过。如果对您已经知道的递归种类使用不同的名称,那么您很快就会发现正在讨论哪种递归。

【讨论】:

  • 你漏掉了一个: 5. 一个函数,在返回之前可能会直接调用自己两次。
  • @IanAbbott 我会添加它。谢谢!
猜你喜欢
  • 2011-03-04
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多