递归调用和普通调用的区别

问题描述

假设有一个函数 f();

void f(int n)
{
  if(n<=1)
    return;
  f(n-1);
  f(n-1);
}

我有两个关于此代码的主要问题:

  1. 递归调用的总数是多少?
  2. 呼叫总数是多少?

还有这段代码的时间复杂度是多少?

基本上,我想了解调用和递归调用间的区别,以及总调用是否也包括递归调用

解决方法

我将专注于您的术语问题

基本上,我想了解调用和递归之间的区别 调用次数以及总调用次数是否也包括递归调用次数。

剩下的就是数数了,你肯定可以自己做。

递归调用是来自同一个函数的调用。所以,例如您的函数 f() 包含两个递归调用,都是 f(n-1)

如果有人调用 f(4),那么这是一个非递归调用(不是来自 f() 内部),并且通过 f(n-1) 会导致很多递归调用,其中 f () 调用自身。

所以:

  • 总调用次数 = 调用次数,包括非递归调用和递归调用。
  • 递归调用是来自 f() 内部的调用。