简单点说,递归就是自己调用自己
这句话是我一哥哥对我说的,因为最近在自学C语言中的数组,他给我出来两道难题(现在会写了,自然就觉得不难了)
他特地跟我讲了一下递归的思想,在什么情况下会使用递归。
当然递归是比较抽象的,但我喜欢把抽象的东西用自己的理解方式来。
首先自学的时候去维基百科搜过递归,维基百科是这样说的
递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程
是不是感觉有点玄?
还好,维基百科还举了个例子,讲什么是递归
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”
可以看似这是一个循环?但递归很神奇,在他的使用中是没有用到C语言中关于循环的语句。
而是通过自己调用自己不断的实现一个循环。
在这里我用一个简单的例子来让大家理解一下递归。
阶层的例子。。n(n-1)(n-2)…………
很多人会想到用for循环来写。
那个可能就没有那么简单,
如果你熟练运用递归
就可以很简单
#include<stdio.h>
int digui(int n){
if (n==0)
return 1;
return n*digui(n-1);
}
int main(){
int m;
scanf("%d",&m);
printf("%d",digui(m));
}
4 条评论
可以看看SICP的1.2节,对递归会有一个更加深刻的认识的。
话说是初中生吗::(你懂的) 自己建站还是很棒的呀
高中啦,读的职高,读的计算机专业,博客初二就开始搭建啦,重新弄好几次啦
加油~ 读CS还是有前途的٩(ˊᗜˋ*)و
C的语法知识学扎实之后可以试试看CLRS,篇幅很长,花个一年时间静下心看看,会很有帮助的~
感谢大佬的建议,一步一脚印,慢慢学。:@(欢呼) c语言最近数组跌了不少跟头。