其他分享
首页 > 其他分享> > 何为递归

何为递归

作者:互联网

1.我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。
当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。。。

2.天下有奇族人姓计,长生不老。一日其孙问其父:吾之18代祖名何?
其父不明,父问其父
其父不明,父问其父
其父不明,父问其父
其父不明,父问其父
...
晌后,其18代祖回其子:你猜
然其回其子:你猜
然其回其子:你猜
然其回其子:你猜
然其回其子:你猜
……
终,计姓末代孙知其18代祖名“你猜”

此乃,递归
3.什么是递归?这里有一个故事是这样说的:
从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说...... 这就是递归

言归正传,递归的本质是一个过程或函数在定义时,出现直接或者间接调用自己的成分。
下面这个求 n! 的例子中,递归出口(确定递归什么时候结束)是fun(1)=1,递归体(确定递归求解时的递归关系)是fun(n)=n*fun(n-1),n>1。
int fun(int n){
    if(n==1)
        return 1;
    else
        return n*fun(n-1);
 }

求n! 的递归思路就是把 f(n)=n! 转化成 fun(n-1) ,再把 fun(n-1) 分解为 f(n-2) 来解决,依此类推直到每个问题都可以直接解决(分解到 fun(1) )。

递归体的一般格式:
f(sn)=g(f(si), f(si+1), …, f(sn-1), cj, cj+1, …, cm)
g是一个非递归函数,cj, cj+1, …, cm为常量

在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,而栈的空间是有限的,调用层次过多容易造成栈溢出。

 

标签:cj,递归,何为,老和尚,其父,fun,有座
来源: https://www.cnblogs.com/gulugulut/p/10856002.html