编辑代码

#include <stdio.h>
#include <string.h>  
#include <stdbool.h>

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

// 台阶问题--递推
int taijie2(int n) {
    if(n < 1)
        return 0;
    if (n == 1 || n == 2)
        return n;
    int tj[n + 1];
    tj[0] = 1;
    tj[1] = 1;
    for (int i = 2; i <= n; i++) {
        tj[i] = tj[i - 1] + tj[i - 2];
    }
    return tj[n];
}

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

// 阶乘问题--递推
int jiecheng2(int n) {
    int y=1;
	if(n==0||n==1) 
        return 1; 
    for(int i=1;i<=n;i++) 
	{
		y=i*y; 
	}
    return y;
    }

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

//斐波拉契问题--递推
int fb2(int n) {
    if(n < 1)
        return 0;
    if (n == 1 || n == 2)
        return 1;
    int f1=1,f2=1,s;
		for(int i=3;i<=n;i++){
			s=f1+f2;
			f1=f2;
			f2=s;
        }
		return s;
}

//回文字符串--递归
bool huiwen1(char str[], int start, int end) { 
    if (start >= end) {
        return true;
    }
    if (str[start] != str[end]) {
        return false;
    }
    return huiwen1(str, start + 1, end - 1);
}

//回文字符串--递推
bool huiwen2(char str[], int len) {  
    int start = 0;
    int end = len - 1;
    while (start < end) {
        if (str[start] != str[end]) {
            return false;
        }
        start++;
        end--;
    }
    return true;
}

int main () {
    printf("台阶问题实现\n");
    printf("递归--爬5个台阶:%d\n", taijie1(5));
    printf("递推--爬5个台阶:%d\n", taijie2(5));
    
    printf("阶乘问题实现\n");
    printf("递归--5的阶乘为:%d\n", jiecheng1(5));
    printf("递推--5的阶乘为:%d\n", jiecheng2(5));

    printf("斐波拉契问题实现\n");
    printf("递归--第七个数为:%d\n", fb1(7));
    printf("递推--第七个数为:%d\n", fb2(7));

    printf("回文字符串实现\n");
    char str1[] = "happyyppah";
    char str2[] = "ahdbhbch";
    if (huiwen1(str1, 0, strlen(str1) - 1)) {
        printf("递归--%s是回文数\n", str1);
    } else {
        printf("递归--%s不是回文数\n", str1);
    }
    if (huiwen1(str2, 0, strlen(str2) - 1)) {
        printf("递归--%s是回文数\n", str2);
    } else {
        printf("递归--%s不是回文数\n", str2);
    }
    
    if (huiwen2(str1, strlen(str1))) {
        printf("递推--%s是回文数\n", str1);
    } else {
        printf("递推--%s不是回文数\n", str1);
    }
    if (huiwen2(str2, strlen(str2))) {
        printf("递推--%s是回文数\n", str2);
    } else {
        printf("递推--%s不是回文数\n", str2);
    }

    return 0;
}