Как мне с помощью стека написать программу последовательности T(n) = T(n/2) + T(n/2) + n; T(1) = 1
Я могу легко использовать рекурсивный метод для его решения, но вопрос требует, чтобы я использовал стек. Мой код показывает неправильный вывод. Я не уверен, как я могу это сделать, так что кто-нибудь может помочь мне исправить, пожалуйста?
Что я уже пробовал:
#include <iostream> #include <stack> using namespace std; int my_sequence(int n) { stack<long> mystack; mystack.push(0); mystack.push(1); for (int i = 1; i <= n; i++) { int a = mystack.top(); mystack.pop(); int b = mystack.top(); mystack.pop(); int c = a / 2 + b / 2 + n; mystack.push(a); mystack.push(c); } return mystack.top(); } int main() { for (int i = 1; i <= 10; i++) { cout << i << '\t' << my_sequence(i) << endl; } system("pause"); }
Rick York
У меня нет решения для вас, но это, очевидно, отличная возможность для вас научиться использовать отладчик. Он покажет вам, что происходит с вашей программой, чтобы вы могли найти свою ошибку.