递归调用是函数执行的最后一件事

时间:2019-05-24 06:09:43

标签: c++ recursion tail-recursion

我无法理解tail recursion是什么。它说如果递归调用是该函数执行的最后一件事,则该递归函数为尾递归。 由于递归调用是最后一条语句,因此当前函数无需执行任何操作,因此保存当前函数的堆栈框架是没有用的。 普通递归如何保存堆栈帧,尾递归有何不同?什么时候应该使用尾递归?所有递归程序都可以用尾递归形式编写吗?

我写了一个程序,我想知道这是否是尾递归。如果没有,那么我该如何进行故事递归?

int recur(int N,int sum, int X)
{
 if (N==2*X)   //X==N; is this tail recursion?
  return sum;
  else
   return recur(N+1,sum+N,X);

 }

#include<bits/stdc++.h>

using namespace std;


int recur(int N){
 int sum=N-1;
 if(N==1)
  return 5;


 sum = sum + recur(N-1)+5;
 return sum;
}


int main(){

  int N,handShake;
  cin>>N;
  handShake=recur(N);
  cout<<handShake;

 return 0;
}

以上计划指出,在N对夫妇的聚会中,只有一个性别(男女)可以与所有人握手。会发生多少握手? 该程序正常工作。

0 个答案:

没有答案