我无法理解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对夫妇的聚会中,只有一个性别(男女)可以与所有人握手。会发生多少握手? 该程序正常工作。