为数字序列创建递归函数

dig*_*gzz 1 c++ recursion

我知道这是基本的CS知识,但我仍然无法掌握在for循环上执行递归函数的想法.我仍然对递归的想法感到困惑,特别是数字.让我们说有一个数字序列3,11,27,59,123 ......我知道如何计算出数学递归序列,它只是An = An-1 +(8*(n-1)),但是不要我真的知道如何将它放入C++递归函数中.

有人可以概述为上述数字序列创建递归函数吗?

Mic*_*ers 5

递归函数有两个"部分",基本情况和递归.基本情况是你的函数停止递归(并开始展开调用堆栈).在没有基础的情况下,函数只是一直调用自己,直到堆栈溢出发生并且程序被OS终止.

递归部分采用初始问题(在您的情况下,在序列中查找第i个数字)并收缩它.这种情况发生在基本情况被击中之前.因此,为了找到序列中的第i个数字,让我们说第4个,你开始寻找第4个数字,但这取决于第3个,这取决于第2个,这取决于第一个.初始递归将问题从第4个数字缩小到第3个.

这是一个针对你的序列的递归函数的刺(不是完全测试过).

int recursive(int i) {
   // This is your base case, it prevents infinite recursion.
   if (i == 0) return 0; // Or whatever you base value is
   else {
     int sum = recursive(i-1) + 8 * (i-1);
     return sum;
   }
 }
Run Code Online (Sandbox Code Playgroud)

很多时候,循环可以完成递归函数.但是有些函数需要递归.例如,阿克曼的功能.关于Computerphile的一个非常好的视频