我的老师刚刚在考试中提出了这个问题,我不知道该往哪里去。 更多细节,函数原型如下:
stack<int> Fibonacci_sequence(int n); //fibonacci numbers count up to n
关键是这个函数是递归的,它应该返回一个堆栈数据类型。在我看来,我不认为这是可能的事情,但我的老师问了!!
P.s:对不起,我的语言是C ++
答案 0 :(得分:1)
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
}
}
上面是一个功能就是这样,用伪代码编写,因为你没有指定语言。希望这有所帮助,想出来很有趣!感谢有趣的问题。
答案 1 :(得分:0)
由于您没有指定语言,和您指定了它是一个考试,这里是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]
您可能需要将其翻译为考试语言,但这是恰当的。
答案 2 :(得分:0)
这是基于@Elliot伪的我的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'
}
}