今天在做题的时候,遇到的这么一个问题,觉得很有意思。在这里先简单的记录一下。
好文章:https://www.cnblogs.com/bakari/p/5349383.html
能用递归解决的问题,必须满足以下两个条件:
- 一个问题能够分解成规模更小,且与原问题有着相同解的问题;
- 存在一个能让递归调用退出的简单出口。 存在一个能让递归调用退出的简单出口。
用递归实现判断回文串
#include<stdio.h>
//判断一个序列是否是回文序列
//递归的方法
int isPalinString(int n,char* str)
{
if(n == 1 || n == 0)
return 1;
else
return str[0] == str[n-1] ? isPalinString(n-2,str+1) : 0;
}
int main(int argc, char const *argv[])
{
char *chars = "level";
int reslut;
reslut = isPalinString(5,chars);
if(reslut == 1)
printf("char is PalinString!\n");
else
printf("char isn't PalinString!\n");
return 0;
}
(很巧妙啊)
将递归算法转换为非递归算法有两种方法:
一种是直接求值(迭代/循环),不需要回溯;(尾递归)
另一种是不能直接求值,需要回溯。
前者使用一些变量保存中间结果,称为直接转换法;
后者使用栈保存中间结果,称为间接转换法,