【问题标题】:Print fibonacci sequence打印斐波那契数列
【发布时间】:2020-03-03 16:01:10
【问题描述】:

我在打印带有斐波那契数列的矩阵时遇到问题。 当我启动程序时,它会打印一个带有整数和其余零的序列。我想要一个北方,能够得出结论。

连续打印功能:

void printArray(int _A[], int _sz)
{
    _A = new int(_sz);


    cout << ">>> [ ";
    for (int i = 0; i <= _sz; i++)
    {
        cout << _A[i] << " ";
    }
    cout << " ]\n";

}

计算序列的函数:

int fib(int _limit, int *_A)
{
    int count = 0;
    int fib0 = 1;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        fib2 = fib0 + fib1;

        count++;  

        fib0 = fib1;
        fib1 = fib2;
    }

    _A = new int(count);
    for (int i = 0; i < count; i++)
    {
        cout << _A[i] << " ";
    }

    return count;
}

主要:

int main()
{
    int L;            
    int *A = nullptr; 
    cout << ">>> Press number: "
    cin >> L; 

    if (L >= 0)
    {
        auto sz = fib(L, A); 
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A, sz); .
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

【问题讨论】:

  • 我不明白“我想要一个北方,能够得出结论”这句话是什么意思。
  • 当您启动程序时,它应该等待您输入一个数字;)您使用什么输入?你得到什么输出?
  • void printArray(int _A[], int _sz) { _A = new int(_sz);...} 为什么?为什么要覆盖参数?
  • 您将一个从new 返回的指针分配给_A,然后在循环中打印_A[i] 时期望看到值。为什么?
  • 顺便说一句。 new int(_sz) 在堆上创建 one, single 新整数,其值为 _sz。也许您打算创建一个 _sz 整数数组 -> new int[_sz]?

标签: c++ fibonacci allocation


【解决方案1】:

你有很多问题。

printArray 中,您使用单个整数指针_A = new int(_sz); 覆盖传入的数组,尝试打印数组的所有元素将是未定义的行为。

fib 中,您还使用new int(count);,这再次分配了一个指针而不是数组。您应该改用new int[count];。你永远不会为数组 _A 的元素赋值,所以它们是未初始化的,使用它们是未定义的行为。

您不会将数组 _A 传递回调用函数。您可以通过将fib 的声明更改为:

int fib(int _limit, int *&_A)

解决所有这些问题的一个好方法是使用std::vector 而不是数组,这样就不需要预先计算序列的大小:

#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::vector;

void printArray(const std::vector<int>& A)
{
    cout << ">>> [ ";
    for (int i : A)
    {
        cout << i << " ";
    }
    cout << " ]\n";

}

void fib(int _limit, std::vector<int>& A)
{
    int fib0 = 1;
    A.push_back(fib0);
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        A.push_back(fib1);
        fib2 = fib0 + fib1;

        fib0 = fib1;
        fib1 = fib2;
    }
}

int main()
{
    int L;
    std::vector<int> A;
    cout << ">>> Press number: ";
    cin >> L; 

    if (L >= 0)
    {
        fib(L, A); 
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

如果您正在学习一些不正当的计算机科学课程,该课程教您 c++,但不允许您使用 c++ 类,那么使用数组的相同代码可能如下所示:

#include <iostream>
using std::cout;
using std::cin;

void printArray(int A[], int _sz)
{
    cout << ">>> [ ";
    for (int i = 0; i <= _sz; i++)
    {
        cout << A[i] << " ";
    }
    cout << " ]\n";

}

int fib(int _limit, int *A)
{
    int count = 0;
    int fib0 = 1;
    if (A) A[0] = fib0;
    int fib1 = 1;
    int fib2 = 0;
    while (fib2 < _limit)
    {
        count++;
        if (A) A[count] = fib1;
        fib2 = fib0 + fib1;
        fib0 = fib1;
        fib1 = fib2;
    }
    return count;
}

int main()
{
    int L;            
    int *A = nullptr; 
    cout << ">>> Press number: ";
    cin >> L;

    if (L >= 0)
    {
        auto sz = fib(L, A);
        A = new int[sz];
        fib(L, A);
        cout << ">>> The Fibonacci series up to " << L << " is: \n";
        printArray(A, sz);
    }
    else
        cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多