提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本次博客分享个人对于递归的一些看法
提示:以下是本篇文章正文内容,下面案例可供参考
一、递归是什么?
递归:程序调用自身的编程技巧称为递归( recursion)。递归时zh一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,
二、使用步骤
1.栈
栈:就是后进先出的一种数据结构,所谓的后进先出就是:后入栈变量数据,先出栈计算处理.
递归:与栈类似,递归到最内层(到退出条件),开始从内层向外逐层调用函数自己计算处理.
2.递归的本质
递归的本质上就是对于栈的运用,先储存的数据最后输出,后储存的数据先输出。
如:
#include<stdio.h>
void reverse();//逆序输出字符串
int main()
{
printf("输入字符串");
reverse();
return 0;
}
void reverse()
{
char s;
scanf("%c",&s);
if(s!='\n')
{
reverse();
printf("%c",s);
}
}
数据是这样储存起来的
g |
f |
d |
d |
a |
1.由于char类型读取习惯,输入字符串时一个一个读取,数据被储存在栈中
2.第一个储存进来的数字被放置在栈底。最后一个储存在栈前
3.如此递归函数
factorial(4)
= 4 * factorial(3)
= 4 * (3 * factorial(2) )
= 4 * (3 * (2 * factorial(1) ) )
= 4 * (3 * (2 * (1 * factorial(0) ) ) )
本质自己调用自己4次,递归至factorial(0),先计算factorial(0)函数,然后逐层调用返回:factorial(1)、factorial(2)、factorial(3).
#include<stdio.h>
int fun(int a);
int main ()
{
int n;
printf("输入一个数字:");
scanf("%d",&n);
printf("%d!=%d",n,fun(n));
return 0;
}
int fun(int a)
{
if(a<=1)
return 1;
return a*fun(a-1);
}