编辑代码

#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; // 若i大于等于j,则字符串是回文字符串;否则不是回文字符串。  
    }     
}