#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 () {
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("\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;
}