Website Summary Files Commits Branches @commit @diff @stats
path: root / Seminar02 / recursion.cpp
diff options
context:
space:
mode:
1 files changed, 33 insertions, 0 deletions
-rw-r--r--Seminar02/recursion.cpp33
diff --git a/Seminar02/recursion.cpp b/Seminar02/recursion.cpp
new file mode 100644
index 0000000..63f4aa0
--- /dev/null
+++ b/Seminar02/recursion.cpp
@@ -0,0 +1,33 @@
+#include<iostream>
+#include<stack>
+
+int fib(unsigned x) {
+ if(x == 0 || x == 1)
+ return 1;
+
+ return fib(x - 1) + fib(x - 2);
+}
+
+// Малък пример как можем да симулираме рекурсия чрез стек.
+int fibStack(unsigned x) {
+ std::stack<unsigned> s;
+ s.push(x);
+ int result = 0;
+
+ while(!s.empty()) {
+ int currArg = s.top();
+ s.pop();
+
+ if(currArg == 1 || currArg == 0)
+ ++result; // Еквивалентно на return 1;
+ else{
+ s.push(currArg - 1); // Еквивалентно на fib(x - 1);
+ s.push(currArg - 2); // Еквивалентно на fib(x - 2);
+ }
+ }
+ return result;
+}
+
+int main() {
+ std::cout << fib(10) << " " << fibStack(10);
+}