什么是递规?详解,深入浅出

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ZhangaZhaoLong/article/details/102325803

**

递规

**

  1. 递规就是一种状态,当我们首次进入从函数入口进入时,这个函数执行到完就是我们所要得到的状态,但是这个状态需要它的下一个状态的来进行计算,所以我们进入要先进入它的下一个状态,可能它的下一个状态也需要它的下下一个状态来计算,所以什么时候不需要下一个状态来计算的时候,就是它停止的时候,这时候我们计算出了最后一个状态,当它计算完成后,它就必须返回上层来执行上一层的状态,因为上一层是依靠下一层来进行计算的,而且下一层就是为了实现上一层才出现的,所以当计算出
    最后一个状态后,就向上返回,必须是一层一层的返回,因为每一层的上一层都是依靠下层才能实现的

**

  1. 现在说说这个函数如何返回,如果要递规那么至少要有二个出口,先说第一个出口,因为我们一直在住下寻找那个不需要下一层就能得出结果的函数入口,所以当到达时那个函数里面时,我们需要在它继续寻找前让它返回,因为它已经找到了不需要再往下寻找,我们已经找到出口了,如果再往下找可能就找不到出口进入死循环,永远也出不来,所以我们要在进入那个函数后在它要去下一个状态前,让它返回,这是第一个出口,第二个出口就是,因为我们让找到了最后一个状态,并且在它继续寻找时返回了回来,所以我们在它的上一层时,我们得到了我们想要的状态,所以我们就可以继续往下执行,来将这个状态计算完成,然后返回上一个状态(因为我们在刚开始进入下一个状态的时候并不是直接就进入了,而是在那个函数中把不需要依靠其它状态的东西先计算完成后,在进入下一个状态去寻找需要的状态,所以我们在返回时,进入函数入口时的位置就是我们返回的位置,返回后我们就得到了那个需要的状态我们就可以继续往下执行了),因为倒数第二层的状态并不像最后一层的状态不需要其它状态就可以直接计算,所以那个函数入口就像是一个分界线,上面的是不需要依靠其它状态就能得结果,而下面的是需要依靠其它状态才能得出结果的,所以上面的在每次寻找状态时都是已经处理过的,所以在拿到它需要的状态后,它开始计算直到完成要返回上一个状态,因为前面那个出口,是留给最后一个不需要依靠其它状态就能计算的函数,所以它已经错过了那个出口,就必须给这些需要依靠其它状态才能计算的函数再写一个出口,也就是一个函数完整执行完的出口

    **

  2. 最后就是当每一层的状态都拿到了它需要的状态,然后计算完成向上返回,直到返回到最初进入时的那个函数,它拿到了它需要的状态,然后进行最后一次计算,返回真正的结果,这就是递规,实际上是为了实现第一个状态,但却要依托于其它的状态

在这里插入图片描述
大家可以根据这个小程序来理解递规,先说一下它的功能:就是num是几就计算它的累乘,比如num是4就是计算432*1的结果,只有到1的时候不用依靠返回值,因为每一层的num刚好是上一层num减1的结果,所以让ret作为返回值,然后每一层的num都对乘它,因为每一层都刚好是上层+1,所以不会乘重复的,然后作为第二个出口将累乘的结果返回出去,再支去乘上一层num,直到每一层也乘完了,就结束把真正的结果返回出去

猜你喜欢

转载自blog.csdn.net/ZhangaZhaoLong/article/details/102325803
今日推荐