目录
一、什么是递归
递归:程序调用自身的编程思想叫做递归,合理运行递归可以帮助我们将问题把大化小.
递归的实现:c语言中递归是要借助栈来实现递归,通过将每次递归的结果压入栈中,再结合栈先进后出的特性来实现递归过程。
二、如何实现递归函数
1.要想实现递归函数,首先就要理解这个函数要完成什么功能,例如在用递归函数将字符串逆序输出这个问题中,这个递归函数实现的功能就是将字符串逆序打印出来.
2.确定递归函数实现的功能后,就要开始实现函数内部细节,此时也是实现递归函数的重点,
首先要确定递归的结束条件,递归的过程就是调用自身函数,所以我们要确定这个结束条件,否则这个函数就会一直调用,导致栈溢出,所以在确定递归的结束条件时要严谨,多考虑可能发生的情况,在用递归函数将字符串逆序输出这个问题中,这个的结束条件就是当这个的字符串的长度小于等于1时,直接进行打印,此时的结果就是逆序的结果
void reverse(int n){
char next;
//结束条件
if(n<=1){
next=getchar();
printf("逆序结果为:\n");
putchar(next);
}
}
在进行结束条件的判断时,有时我们会写n==1这种情况,这种往往是存在错误的,当n=0;此时函数就会继续调用,存在漏洞,会导致栈溢出,所以我们要以n<=1为条件。
其次就是我们要不断减小参数的大小,让每次的调用都不断接近这个结束条件,当某一次的调用为这个结束条件后,我们的调用过程就完成了。
else{
next=getchar();
reverse(n-1);//递归调用 上一级的结果存储在栈中,递归的实现离不开栈
putchar(next);
}
递归函数将字符串逆序输出的完成代码如下:
#include <stdio.h>
void reverse(int n){
char next;
//结束条件
if(n<=1){
next=getchar();
printf("逆序结果为:\n");
putchar(next);
}
else{
next=getchar();
reverse(n-1);//递归调用 上一级的结果存储在栈中,递归的实现离不开栈
putchar(next);
}
}
int main(){
char next;
int n=5;
printf("请输入%d个字符:\n",n);
reverse(n);
return 0;
}
三、什么时候应该使用递归
解决问题时,可以把一个问题转化为一个新的问题,而这个新的问题的解决方法仍与原问题的解法相同,只是所处理的对象有所不同,这些被处理的对象之间是有规律的递增或递减;这时我们就可以使用递归,但要注意这个问题有没有明确的结束条件,不要陷入循环,
常见的使用的递归解决的问题,如斐波那契数列,小青蛙跳台阶,字符串逆序等。