【问题标题】:Fibonacci! Recursive printf斐波那契!递归打印
【发布时间】:2012-02-15 03:07:33
【问题描述】:

我被要求这样做:

Please input Number: 4
+-+-+-+
+
+
+-+
+
Total is 5

其他例子”

Please input Number: 5
+-+-+-+-+
+
+
+-+
+
+
+-+-+
+
+
total is  8

虽然这个问题让我发疯。我一直在编码和研究斐波那契的工作原理,同时找出模式。

我想出的最好的代码是这样的:

#include <stdio.h>
#include <conio.h>

int fibo(int condition)
{
    if(condition <= 2)
    {
        return printf("+");
    }
    else
    {
        printf("+");
        printf("-");
        printf("\n");
        fibo(condition - 2) + fibo(condition - 1);
    }
}


int main()
{
    int takeNumber;

    printf("Please give a number!\n");
    scanf("%d",&takeNumber);
    fibo(takeNumber);
    getch();
}

他对“唯一递归规则”非常严格

我感到困惑和沮丧,我不知道我是否应该将“+”、“-”和“prinf("\n");”分开。我试过了,堆栈溢出错误。

学习模式很难,有人可以帮帮我吗?

【问题讨论】:

  • 这段代码甚至无法编译!你写的真实代码是什么?
  • 一方面,不要返回printf("+"),而是返回printf 并返回斐波那契数。其次,确保用大括号({})将printf 括在else 中。此外,您没有返回您应该返回的 fibo(c-2)+fibo(c-1) 的结果。
  • 这是我的代码,可以在我的电脑上运行。
  • 最后,你能解释一下输出到底是什么吗?我的意思是带有 4、1、1、2 和 1 加号的线条对我来说似乎不像 fubonacci!
  • 伙计们,你有没有注意到输出看起来像一个分形“F”?

标签: c recursion variable-assignment fibonacci


【解决方案1】:

喜欢这个?

#include <stdio.h>
#include <conio.h>

int fibo(int condition)
{
    if(condition < 2)
    {
        printf("+\n");
        return 1;
    }
    else
    {
        int n0,n1;
        printf("+-");
        n1 = fibo(condition - 1);
        n0 = fibo(condition - 2);
        return  n0 + n1;
    }
}


int main()
{
    int takeNumber;

    printf("Please input Number: ");
    scanf("%d",&takeNumber);
    printf("Total is %d\n", fibo(takeNumber));
    getch();
}

【讨论】:

  • 我通过您的评论和输出示例修复了您的代码。我也想问一下程序的意义。
  • 我也不知道,他只是给了我们文件。没有任何线索。
【解决方案2】:

我想你想做什么,是这样的:

int fibo (int n)
{
    printf("%d ", n);  // replace this with fancy + printing...

    if(n <= 2)
    {
        return n;
    }
    else
    {
        return fibo(n- 2) + fibo(n- 1);
    }
}

递归函数就像任何其他函数一样:如果它返回一些东西,它必须在所有情况下都这样做。您只在某些情况下返回了一个值,因此您调用了未定义的行为。

【讨论】:

  • @Lundin,虽然您的答案对于计算斐波那契数是正确的,但我怀疑作业需要花式 + 打印本身以递归方式完成。如果您注意到,每个加号就像一个加到数字的 1,所以问题的设计者可能意味着它们要单独打印,最终加起来是斐波那契数
猜你喜欢
  • 2013-04-11
  • 2010-12-03
  • 2023-01-18
  • 2015-02-09
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2016-10-31
相关资源
最近更新 更多