数据结构中的递归原理
递归是一个函数调用自身的过程。我们使用递归将较大的问题分解为较小的子问题。我们要记住的一件事是,如果每个子问题都遵循相同的模式,那么只有我们可以使用递归方法。
递归函数具有两个不同的部分。基本情况和递归情况。基本情况用于终止重复执行的任务。如果未定义基本情况,则该函数将无限次重复(理论上)。
在计算机程序中,当我们调用一个功能时,程序计数器的值在跳转到功能区之前被存储到内部堆栈中。完成任务后,它将弹出地址并将其分配到程序计数器中,然后继续执行任务。在递归调用期间,它将多次存储地址,并跳转到下一个函数调用语句。如果未定义一种基本情况,它将一次又一次地重复,并将地址存储到堆栈中。如果堆栈不再有空间,它将引发错误“内部堆栈溢出”。
递归调用的一个示例是查找数字的阶乘。我们可以看到一个数的阶乘n=n!与n*(n-1)!相同,再次与n*(n-1)*(n-2)!相同。因此,如果阶乘是函数,则将一次又一次调用它,但参数将减少1。当参数为1或0时,它将返回1。这可能是递归的基本情况。
示例
#include<iostream> using namespace std; long fact(long n){ if(n <= 1) return 1; return n * fact(n-1); } main(){ cout << "Factorial of 6: " << fact(6); }
输出结果
Factorial of 6: 720