首页 > 解决方案 > 为什么递归函数的最终输出是5?

问题描述

为什么上面代码的输出是 5,因为函数应该去第一个 5-4-3-2(因为没有输出)循环递减到 1 所以返回 12 所以最后是 12+1..... 所以答案必须我猜不是5?

using namespace std;
int  x()
{
}
int reee(int n)
{
  for(int i=n; i>0; i--)
  {
  if(i==2)
  {
    return x();
  }
  else if(n==1)
  {
    return 12;
  }
  else
  {
     return reee(i-1)+1;
  }
}
}
int main()
{
  cout << reee(5) << " ";
}

标签: c++recursiondata-structuresrecursive-querytail-recursion

解决方案


在这种情况下不需要 for 循环,因为您的函数已经是一个递归函数,因此它会一直运行该函数直到它为 2。当它为 2 时,它返回 x 使其为空主体 + 3。如果你想要它到 1,在 i==2 的 if 语句中,你应该让它 return(i-1) 因此,你的代码应该是这样的:

using namespace std;

int reee(int n)
{
  if(n==2) {
    return reee(--n);
  } else if(n==1) {
    return (n+12);
  } else {
     return reee(--n)+1;
  }
}
int main()
{
  cout << reee(5) << " ";
}

这应该可以帮助您实现您想要实现的目标。


推荐阅读