递归实现二分查找

 

回文是一种字符串,它正着读和反着读都是一样的。比如level,eye都是回文。用迭代的方法可以很快地判断一个字符串是否为回文。用递归的方法如何来实现呢?

首先我们要考虑使用递归的两个条件:

  • 第一:这个问题是否可以分解为形式相同但规模更小的问题?
  • 第二:如果存在这样一种分解,那么这种分解是否存在一种简单情境?

 

#include"iostream"
#include<stdio.h>
#include"string"
#define MAX 100
using namespace std;


/*这是错误的,传进str的整个string则没有办法化解成小问题,这里需要指
之后强行把string str 改为指针也不对,会出现异常错误。
int per(int n ,string str){
    if (n == 1 && n == 0)
        return 1;
    else {
        per(n - 2, str[1]);
    }
}
*/
int per(int n, char *str) {
    if (n == 1 || n == 0)
        return 1;
    else {
        if (str[0] == str[n - 1])
             per(n - 2, &str[1]);
        else
            return -1;
    }
}



int main() {
    int len;
    char str[MAX];
    while(1)
    {
        printf("please enter the word :");
        //os<<s
        scanf("%s", &str);
        len = (int)strlen(str);
        int result = per(len, str);
        if (result == 1)
            printf("true\n");
        else
            printf("fault\n");

    }
    
    system("pause ");
}

 

posted @ 2017-12-01 09:00  小陈同学啦  阅读(850)  评论(0编辑  收藏  举报