如何写任何递归函数的重现?

时间:2018-03-17 13:09:21

标签: algorithm recursion recurrence

我见过很多例子,但无法找到正确的程序来编写任何递归函数的重现。例如:如果我看到这些功能, 我该如何写出准确的复发?

void print (int n)
{
if (n>0)
{cout<< n<<endl;
print(n-1);}
}

int power (int x, int n)
{
        If (n==0)
        return 1;
    else
        return x * power (x, n-1);
}

Int fib (int n)
{
If (n==0 or n==1)
    return 1;
else
    return fib(n-1) +fib (n-2);
}

int numberofDigits(int n) {
  if ((-10 < n) && (n < 10))
    return 1;
  else
    return 1 + numberofDigits(n/10);
}

这些都是递归函数。我们可以看到,像(斐波那契,因子等)函数的一些函数已经在互联网上预先描述了重复。

但是如何自己写一个复发?

1 个答案:

答案 0 :(得分:0)

通常情况下会出现递归函数:

  • 递归案例
  • &#34; base&#34;情况下

例如在Fibonacci案例中,基本情况为&#34;如果n为1或0,则答案为1&#34;,而递归情况定义为前两个数字的总和。

创建自己的递归函数的方法是隔离递归和基本情况,然后实现。所以规范的递归函数看起来像这样:

type my_recursion(type var)
{
  if (/* base case */)
    return /* base case value */;
  else
    return my_recursion(/* pass something in here */);
}