试图创建一个函数来查找用户输入数字的斐波那契数
Trying to make a function that finds the Fibonacci number of a user input number
我正在尝试制作一个程序,用户输入一个数字,然后将该数字输入到一个函数中,它输出该数字所在的斐波那契序列的元素。
它给了我一个错误,上面写着
变量"fib"周围的堆栈已损坏
我不知道这是逻辑错误还是程序错误。此外,我也不知道我寻找斐波那契数的逻辑是否正确。
#include <iostream>
using namespace std;
int Fibonacci(int num)
{
int fib[] = { 0 }, answer, i = 3;
fib[1] = fib[2] = 1;
fib[0] = 0;
for (i = 3; i < num; i++)
{
fib[i] = fib[i - 2] + fib[i - 1];
}
answer = fib[num];
return answer;
}
int main()
{
int user_number, i = 0;
cin >> user_number;
cout << Fibonacci(user_number) << endl;
return 0;
}
1堆栈损坏最有可能是因为您的阵列
int fib[] = { 0 }
您已经声明了一个大小为1的int数组,然后在访问数据后立即超出数组的边界
fib[1] = fib[2] = 1;
至于斐波那契序列,它特别容易用递归实现;
int Fib(int var)
{
if (var < 1)
{
return 0;
}
else if (var == 1 || var == 2)
{
return 1;
}
else
{
return Fib(var-2)+Fib(var-1);
}
您定义的fib
只有一个元素,因此会发生缓冲区溢出。要解决此问题,可以使用动态内存分配。将fib
定义为int*
(指向int的指针),并使用fib=malloc(sizeof(int)*num);
进行分配,不要忘记使用free(fib);
进行释放。或者,如果编译器支持C99,则可以使用可变长度数组。
还有一种更好的算法,它不需要数组。因为Fib(n)只依赖于Fib(n-1)和Fib(n-2),所以可以使用两个变量来存储Fib(n-1)和Fibre(n-2),而不存储以前的元素。
您有一个主要问题,循环到num-1,您必须将其更改为:
for (i = 3; i <= num; i++)
{
fib[i] = fib[i - 2] + fib[i - 1];
}
以完成完整的安全性。也许你在初始化数组时遇到了问题,你不一定要这么做,只需声明它:
int fib [num]; //the size is because num gonna be the last element of your array.
相关文章:
- 从C++中的数字输入动态创建矩阵
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 非数字输入检查
- C++和 XAML - 来自文本框的数字输入
- 该代码不会在其中显示任何数字输入.如何使它显示任何输入
- 如何从数字输入文件中查找最大数字
- C++ 将数字输入数组并输出
- 无法从字符串获取数字输入
- 输入数字输入到if语句中
- C++数字输入的输入验证
- 来自单个数字输入的Arduino读取脉冲宽度频率和占空比
- 如何区分数字输入和字母输入
- 为什么我的程序取消了更多的数字输入
- C++:运行程序时出现分段错误(将文件中的数字输入数组)
- C++:使用for循环允许用户将数字输入到数组中
- C++ - 如何将空格分隔的数字输入数组
- _wtoi返回零:输入零或非数字输入
- 数字输入的输入验证
- 为什么我随机生成的数字输入都是零
- 我需要让一个数字输入的用户输出单个数字使用c++