zoukankan      html  css  js  c++  java
  • 递归问题:判断某个字串是否是回文

    回文是指正着读和反着读都一样的句子,例如“我是谁是我”。

    递归算法的核心是通过“自己调用自己”将问题规模不断缩减以解决问题。

    为此,递归算法首先最终要的是要有判断结束条件,这是易错点,类似循环中防止无限循环。为解决这个问题通常需要一个控制递归终结的变量,在递归过程中不断改变它的值以达到终结条件,因此该值通常作为函数参数。

    回文问题的算法描述如下:

    1、若字符串中只有一个或零个字符即是回文。

    2、若字符串的首尾字符相同则保留并去掉首尾再次判断,否则排除。

     由此得到源码:

     1 import java.util.Scanner;
     2 
     3 public class Palindrome {
     4     
     5     public static void palJudge(String str,int n)
     6     {
     7         String temp="";
     8         if(n<2)
     9             System.out.println("true");
    10         else
    11         {
    12             if(str.charAt(0)==str.charAt(str.length()-1))
    13             {
    14                 for(int i=1;i<(str.length()-1);i++)
    15                 {
    16                     temp += str.charAt(i);
    17                 }
    18                 palJudge(temp,n-2);
    19             } else {
    20                 System.out.println("false");
    21             }
    22         }
    23     }
    24 
    25     public static void main(String[] args) {
    26         String str;
    27         Scanner in = new Scanner(System.in);
    28         str = in.next();
    29         palJudge(str, str.length());
    30     }
    31 
    32 }

    得到的结果如下:

     

    改进:

    该算法有一个很明显的缺陷就是在递归函数中存在for循环,因此每次递归都要进行一次for循环,致使程序效率低下,而通过控制字符串下标可以规避这个问题,可以将palJudge函数修改为如下:

     1 public static void palJudge(String str,int n)
     2     {
     3         String temp="";
     4         if(n<2)
     5             System.out.println("true");
     6         else
     7         {
     8             if(str.charAt(n)==str.charAt(str.length()-1-n))
     9             {
    10                 palJudge(str,--n);
    11             } else {
    12                 System.out.println("false");
    13             }
    14         }
    15     }
  • 相关阅读:
    白鸦:互联网就是社区,液态的社区
    「芭比娃娃.com」
    做几个经营「人」的小网站,速速卖给大公司?
    关于工作与生活来自前hp总裁孙振耀
    新网站上线,酷狗狗 www.coogogo.com
    中国地摊联盟群组
    discuz!nt论坛搬迁后出错,提示:对象名 'dnt_templates' 无效
    时光.旅人
    const和readonly
    html.partial的一个bug?
  • 原文地址:https://www.cnblogs.com/52bb/p/11579511.html
Copyright © 2011-2022 走看看