#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;
}