Recursion 编写一个返回斐波那契序列堆栈的递归函数
我的老师刚在考试中问了这个问题,我不知道该去哪里。 更多详细信息,功能原型如下所示:Recursion 编写一个返回斐波那契序列堆栈的递归函数,recursion,stack,fibonacci,Recursion,Stack,Fibonacci,我的老师刚在考试中问了这个问题,我不知道该去哪里。 更多详细信息,功能原型如下所示: stack<int> Fibonacci_sequence(int n); //fibonacci numbers count up to n stack Fibonacci_序列(intn)//斐波那契数到n 关键是这个函数是递归的,它应该返回堆栈数据类型。在我看来,我不认为这是一个可能的事情,但我的老师问它 抱歉,我的语言是C++函数堆栈斐波那契序列(int n){ function sta
stack<int> Fibonacci_sequence(int n); //fibonacci numbers count up to n
stack Fibonacci_序列(intn)//斐波那契数到n
关键是这个函数是递归的,它应该返回堆栈数据类型。在我看来,我不认为这是一个可能的事情,但我的老师问它
抱歉,我的语言是C++函数堆栈斐波那契序列(int n){
function stack<int> Fibonacci_sequence(int n) {
if n == 0 {
var a stack<int>;
a.push(0);
return a
} else if n == 1 {
var a stack<int>;
a.push(0);
a.push(1);
return a
} else
var temp int;
var seq int;
seq = Fibonacci_sequence(n-1);
temp = seq.pop;
seq.push(temp);
seq.push(temp);
//above: the top element of the stack must be duplicated because it
//is popped off in the process of calculating the sum.
seq.push(seq.pop()+Fibonacci_sequence(n-2).pop());
return seq
}
}
如果n==0{
var是一个堆栈;
a、 推(0);
归还
}如果n==1,则为else{
var是一个堆栈;
a、 推(0);
a、 推(1);
归还
}否则
var-temp-int;
var-seq-int;
seq=斐波那契序列(n-1);
温度=序号pop;
顺序推送(温度);
顺序推送(温度);
//上图:堆栈的顶部元素必须重复,因为它
//在计算总和的过程中弹出。
seq.push(seq.pop()+斐波那契序列(n-2.pop());
返回顺序
}
}
上面的函数就是这样做的,它是用伪代码编写的,因为您没有指定语言。希望这有帮助,这是有趣的想出!谢谢你提出了这个有趣的问题。因为你没有指定语言,而且你指定这是一个考试,这里是Ruby。Ruby为数组提供堆栈操作,但我在下面只使用了
push
和pop
操作,因此您应该能够轻松地将其转换为您选择的语言
def fib(n) # no explicit return type, since everything's an object in Ruby
fail "negative argument not allowed" if n < 0
if n > 1
stack = fib(n - 1)
# grab the last two values...
f_n_1 = stack.pop
f_n_2 = stack.pop
# ...and use them to calculate the next.
# The value of this expression is the resulting stack, return it
return stack.push(f_n_2).push(f_n_1).push(f_n_1 + f_n_2)
elsif n == 1
return fib(0).push(1)
else
return [].push(0)
end
end
p fib(10) # => [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
def fib(n)#没有显式的返回类型,因为在Ruby中一切都是对象
如果n<0,则“不允许使用否定参数”失败
如果n>1
堆栈=fib(n-1)
#抓取最后两个值。。。
f_n_1=stack.pop
f_n_2=stack.pop
#…并用它们来计算下一个。
#此表达式的值是结果堆栈,返回它
返回堆栈.push(f_n_2).push(f_n_1).push(f_n_1+f_n_2)
elsif n==1
返回fib(0)。推送(1)
其他的
返回[]。推送(0)
结束
结束
p fib(10)#=>[0,1,1,2,3,5,8,13,21,34,55]
<>你可能需要把这个翻译成你的考试语言,但这是合适的。 < P>这是我基于埃利奥特伪的C++代码,它有错误,我在代码中指定了这些错误。如果我发现pop()不返回值,我会修正它
stack<int> Fibonacci_sequence(int n)
{
if (n == 0) {
stack<int> a;
a.push(0);
return a;
}
else if (n == 1) {
stack<int> a;
a.push(0);
a.push(1);
return a;
}
else
{
int temp;
temp = Fibonacci_sequence(n - 1).pop(); //error C2440: '=': cannot convert from 'void' to 'int'
Fibonacci_sequence(n - 1).push(temp);
Fibonacci_sequence(n - 1).push(temp);
//above: the top element of the stack must be duplicated because it
//is popped off in the process of calculating the sum.
return Fibonacci_sequence(n - 1).push(Fibonacci_sequence(n - 1).pop() + Fibonacci_sequence(n - 2).pop());//error C2186: '+': illegal operand of type 'void'
}
}
stack Fibonacci_序列(int n)
{
如果(n==0){
堆栈a;
a、 推(0);
返回a;
}
else如果(n==1){
堆栈a;
a、 推(0);
a、 推(1);
返回a;
}
其他的
{
内部温度;
temp=Fibonacci_序列(n-1).pop();//错误C2440:“=”:无法从“void”转换为“int”
Fibonacci_序列(n-1).push(temp);
Fibonacci_序列(n-1).push(temp);
//上图:堆栈的顶部元素必须重复,因为它
//在计算总和的过程中弹出。
返回Fibonacci_序列(n-1).push(Fibonacci_序列(n-1).pop()+Fibonacci_序列(n-2).pop());//错误C2186:“+”:类型为“void”的非法操作数
}
}
为这个公式编写代码:如果(n=0或1)那么fib(n)=1,否则fib(n)=fib(n-1)+fib(n-2)
。检查这个链接:我知道如何生成FIB序列,但不知道如何返回包含它的堆栈,这样你可以在C++中更具体,因为我真的不知道这些想法。如何使用:Fibonacci_序列(n-1).push(Fibonacci_序列(n-1).pop()+Fibonacci_序列(n-2).pop());因为Fibonacci_序列只是一个返回堆栈的函数,所以它不是堆栈,对吗?想象一下:b=Fibonacci_序列(n-1)//因为它返回堆栈,对吗?c=Fibonacci_序列(n-2)//现在你可以做:b.push(b.pop()+c.pop()),这只是写上面内容的一种更长的方式。行:返回Fibonacci_序列(n-1)。push(Fibonacci_序列(n-1)。pop()+Fibonacci_序列(n-2)。pop());将导致错误,因为推送是一个无效类型,然后它不能返回,我如何才能修复它?啊,你是对的,我的坏。取而代之的是Fibonacci(n-1)。push(Fibonacci(n-1)。pop()+Fibonacci(n-2)。pop())返回Fibonacci(n-1)。我将编辑我的伪代码,只是在最后一个else中做了一点小小的更改:else{stack b;b=Fibonacci_序列(n-1);b.push(Fibonacci_序列(n-1)。top()+Fibonacci序列(n-2)。top())CUT你能帮我在C++中工作吗?我真的不知道容器推送在那个函数中的作用,它是一个函数,它返回一个栈,但是它不是一个栈,我不打算为你写你的答案。我使用标准栈操作<代码> Pux<代码>和<代码> POP< /COD>,这是Ruby中的数组操作。此逻辑应映射到任何提供堆栈的语言,该堆栈具有push
/pop
。我没有完成此问题就完成了考试:D,我只想知道答案。问题是堆栈fibonacci(int n)是一个函数,而不是一个堆栈,你怎么能使用STL容器呢?我真的不明白。在这种情况下,我建议把翻译这个当作一个学习练习。fib
是上面代码中的一个函数,我甚至在评论中指出它没有显式的返回类型,但你应该清楚地看到return
statements。我看不出你的问题,用Fibonacci\u序列
替换fib
全局,以获得几乎1-1的所需映射。你不想一直多次调用你的Fibonacci\u序列
。