Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185132
  • 博文数量: 49
  • 博客积分: 635
  • 博客等级: 中士
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 12:58
文章分类

全部博文(49)

文章存档

2012年(9)

2011年(40)

分类: C/C++

2011-11-18 11:16:45

摘自某博客,并不是每个问题都能用递归解决,能用递归解决的问题,必须满足两个条件:
1、可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;
2、存在 一种简单情景,可以使递归在简单情境下退出。

比如回文问题,如果首尾字符相同,则删除首尾字符,继续比较,问题规模缩小了,同时,当字符串长度为1或者0的时候,此时的字符串肯定是回文的,即满足条件2。
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int is_palindrome(char *para_str, int len);

  4. int main(int argc, char *argv[])
  5. {
  6.     int n = atoi(argv[2]);
  7.     if(is_palindrome(argv[1], n))
  8.      printf("This string is palindrome!\n");
  9.     return 0;
  10. }

  11. int is_palindrome(char *para_str, int len)
  12. {
  13.     if(len == 0 || len == 1)
  14.      return 1;
  15.     else
  16.      return (para_str[0] == para_str[len-1] ? is_palindrome(para_str+1, len-2) : 0);
  17. }
阅读(1660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~