gpt4 book ai didi

c++ - 递归函数中的段错误

转载 作者:行者123 更新时间:2023-11-30 00:53:09 26 4
gpt4 key购买 nike

我最近第一次阅读有关内存的内容(我是菜鸟),我想尝试制作一个使用内存的斐波那契函数。这是我试过的方法,但任何超过 1 的值都会给我一个段错误。任何帮助表示赞赏!

unsigned int fibonacci( unsigned int n )
{
vector<unsigned int> fibvector;
if ( n <= 1 )
return n;
if ( fibvector.size() >= n )
return fibvector[n];
unsigned int add = fibonacci( n-1 ) + fibonacci( n-2 );
fibvector[n] = add;
return add;
}

最佳答案

vector<unsigned int> fibvector; 

是局部变量。每次调用 fibonacci(n) 时,都会创建一个没有元素的新 vector 。您可以通过将其设为静态来修复它。

static vector<unsigned int> fibvector(MAXELEMENTS); 

MAXELEMENTS 用于初始化目的。在这种情况下,您需要使用

进行测试
if(fibvector[n] != 0) return fibvector[n];

编辑:如果您不想要求固定数量的元素,您可以使用以下内容

unsigned int fibonacci( unsigned int n )
{
static vector<unsigned int> fibvector;
unsigned int fib;

if ( fibvector.size() > n )
return fibvector[n];
if(n <=1){
fib = n;
}
else{
unsigned int v2 = fibonacci( n-2 );
unsigned int v1 = fibonacci( n-1 );
fib = v2 + v1;
}
fibvector.push_back(fib);
return fib;
}

这个想法是 fibonacci(n) 的递归方法将首先计算 fibonacci(0)、fibonacci(1)、fibonacci(2) 直到 fibonacci(n)。这意味着它将按照 n 的自然顺序进行计算,而 push_back 将准确地遵循此顺序。

关于c++ - 递归函数中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com