#include <stdio.h>
#include <string.h>
int stepRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else {
return stepRecursive(n - 1) + stepRecursive(n - 2);
}
}
void stepIterative(int n, int* result) {
int a = 1, b = 1;
for (int i = 3; i <= n; i++) {
int c = a + b;
a = b;
b = c;
}
*result = b;
}
int factorialRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorialRecursive(n - 1);
}
}
void factorialIterative(int n, int* result) {
int resultValue = 1;
for (int i = 2; i <= n; i++) {
resultValue *= i;
}
*result = resultValue;
}
int fibonacciRecursive(int n) {
if (n == 0 || n == 1) {
return n;
} else {
return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
}
void fibonacciIterative(int n, int* result) {
int a = 0, b = 1;
for (int i = 2; i <= n; i++) {
int c = a + b;
a = b;
b = c;
}
*result = b;
}
int isPalindromeRecursive(char* s) {
int len = strlen(s);
if (len <= 1) {
return 1;
} else if (s[0] == s[len - 1]) {
return isPalindromeRecursive(s + 1) && isPalindromeRecursive(s + len - 2);
} else {
return 0;
}
}
int isPalindromeIterative(char* s) {
int len = strlen(s);
if (len <= 1) {
return 1;
} else {
int i = 0, j = len - 1;
while (i < j && s[i] == s[j]) {
i++;
j--;
}
return i >= j;
}
}