编辑代码

#include <stdio.h>

//台阶问题
//递归
int f1(int n){
    if(n == 0 || n == 1){
        return 1;
    }else if(n == 2){
        return 2;
    }else{
        return f1(n - 1) + f1(n - 2);
    }
}

//递推
int f(int n){
    if(n < 1){
        return 0;
    }

    if(n == 1 || n == 2){
        return n;
    } 

    int nm2 = 1;
    int nm1 = 2;
    int result = 0;

    for(int i = 3; i <= n; ++i){
        result = nm1 + nm2;
        nm2 = nm1;
        nm1 = result;
    }  
    return result;
}

//阶乘问题
// 递归
int fact1(int n){
    if(n == 0){
        return 1;
    }else{
        return n * fact1(n-1);
    }
}

// 递推
int fact(int n){
    if(n == 0) return 1;

    int result = 1;

    for(int i = 1; i <= n; ++i){
        result = result * i;
    }

    return result;
}

//斐波拉契问题
//递归
int fibonacci(int n){
    if(n < 1){
        return 0;
    }
    if(n == 1 || n == 2){
        return 1;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

//递推
int fibonacci1(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 ishuiwen(const char* str,int strLen){
    if(strLen <= 1){
        return 1;
    }

    if(str[0] == str[strLen - 1]){
        return isNot(str+1,strLen-2);
    }

    return 0;
}

//递推
int isNot(const char* str,int strLen){
    if(strLen <= 1){
        return 1;
    }

    for(int i=0; i < strLen/2; i++){
        if(str[i] == str[strLen - i - 1]){
            return 1;
        }
    }
    
    return 0;
}

int main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    //printf("Hello world!     - c.jsrun.net.");

    //台阶问题
    printf("台阶问题递归实现:\n");
    printf("%d\n",f1(0));
    printf("%d\n",f1(1));
    printf("%d\n",f1(2));
    printf("%d\n",f1(3));
    printf("%d\n",f1(4));

    printf("台阶问题递推实现:\n");
    printf("%d\n",f(0));
    printf("%d\n",f(1));
    printf("%d\n",f(2));
    printf("%d\n",f(3));
    printf("%d\n",f(4));
    printf("\n");

    //阶乘问题
    printf("阶乘问题递归实现:\n");
    printf("0! = %d\n",fact1(0));
    printf("2! = %d\n",fact1(2));
    printf("4! = %d\n",fact1(4));

    printf("阶乘问题递推实现:\n");
    printf("1! = %d\n",fact(1));
    printf("3! = %d\n",fact(3));
    printf("5! = %d\n",fact(5));
    printf("\n");

    //斐波拉契问题
    // printf("%d\n",fibonacci(5));
    // printf("%d\n",fibonacci1(5));
    printf("\n");

    //回文字符串
    printf("回文字符串递归实现%d\n",ishuiwen("01234",5));
    printf("回文字符串递归实现%d\n",ishuiwen("12321",5));
    printf("回文字符串递归实现%d\n",ishuiwen("12345",5));

    printf("回文字符串递推实现%d\n",isNot("01234",5));
    printf("回文字符串递推实现%d\n",isNot("12321",5));
    printf("回文字符串递推实现%d\n",isNot("12345",5));

    return 0;
}