【问题标题】:Fibonacci C++ return Error斐波那契 C++ 返回错误
【发布时间】:2017-12-07 18:24:23
【问题描述】:

我想创建一个打印出 fib 数字的函数。但我无法修复此错误。接下来从初始化开始始终保持不变。我是 Cpp 的初学者。

#include "stdafx.h"
#include <math.h>
#include <iostream>

int fib(int &n)
{
    int first = 0, second = 1, next{};

    for (int i = 0; i <= n; i++) {
        if (i <= 1) {
            int next = i;

        }

        else
        {
            int next = first + second;
            first = second;
            second = next;

        }
        std::cout << next << std::endl;
    }
return next;
}



int main()

{

    int stelle;

    std::cout << "Bitte geben Sie die Stelle der Fibonacci Folge ein die Sie erhalten möchten" << std::endl;
    std::cin >> stelle;
    fib(stelle);

    std::cout << "Tastedrücken zum Beenden";
    int var;
    std::cin >> var;

    return 0;
}

感谢您的帮助

【问题讨论】:

  • 你能提供错误吗?
  • 您的i 始终以0 开头,这意味着它始终 &lt;= 1 这意味着它始终 输入您的第一个@987654325 @ 其中包含 return next。您的 for 循环在第一次迭代时总是命中 return next,无论您的函数的输入如何,它都不可能走得更远。
  • 你怎么知道它返回了什么?您没有捕获返回值。
  • 如果您希望for 继续进行以下迭代,请不要将return 放入循环中。
  • 通过使参数成为引用,您已禁止某人调用fib(5)

标签: c++ fibonacci


【解决方案1】:

你的代码让我觉得如何将数学转换为代码不够清晰。

您可以使用迭代逻辑或递归逻辑来实现它。

在任何一种情况下,您都必须处理两个连续的数字。

假设您从 0 和 1 作为起始数字开始。
在下一次迭代中,它们需要为 1 和 1。
在下一次迭代中,它们需要是 1 和 2。
在下一次迭代中,它们需要是 2 和 3。
在下一次迭代中,它们需要是 3 和 5。

等等

在迭代(或递归)结束时,该对中的第二个数字是最终的斐波那契数。

这是一个这样的实现。

int fib(int n)
{
   if ( n == 0 )
   {
      return 0;
   }

   int ans1 = 0;
   int ans2 = 1;
   for (int i = 1; i < n; ++i )
   {
      int temp = ans2;
      ans2 = ans1 + ans2;
      ans1 = temp;
   }
   return ans2;
}

一个工作程序:

#include <iostream>

int fib(int n)
{
   if ( n == 0 )
   {
      return 0;
   }

   int ans1 = 0;
   int ans2 = 1;
   for (int i = 1; i < n; ++i )
   {
      int temp = ans2;
      ans2 = ans1 + ans2;
      ans1 = temp;
   }
   return ans2;
}

int main()
{
   int stelle;

   std::cout << "Bitte geben Sie die Stelle der Fibonacci Folge ein die Sie erhalten möchten" << std::endl;
   std::cin >> stelle;
   for ( int i = 1; i < stelle; ++i )
   {
      std::cout << "fib(" << i << "): " << fib(i) << std::endl;
   }

   return 0;
}

输入为20时程序的输出:

Bitte geben Sie die Stelle der Fibonacci Folge ein die Sie erhalten m▒chten
fib(1): 1
fib(2): 1
fib(3): 2
fib(4): 3
fib(5): 5
fib(6): 8
fib(7): 13
fib(8): 21
fib(9): 34
fib(10): 55
fib(11): 89
fib(12): 144
fib(13): 233
fib(14): 377
fib(15): 610
fib(16): 987
fib(17): 1597
fib(18): 2584
fib(19): 4181

【讨论】:

  • 谢谢!现在我必须理解它。为什么会这样。
  • 如果我返回 ans1,为什么你返回 ans2 我得到相同的结果。但如果我返回 temp
  • 以及为什么我必须使用两个 for 循环
  • 无论您返回ans1 还是ans2,都不可能得到相同的答案。它们是不同的数字,除非 n 等于 2。
  • for 中的 main 循环只是为了让您可以看到整个数字序列,而不仅仅是最终数字。它使最终答案更具可信度。
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2013-11-30
相关资源
最近更新 更多