提问者:小点点

为什么我geting 0作为结果,我想要返回值作为结果?


我希望结果是从神秘函数返回的值,但是结果总是0.但是我希望程序返回从神秘函数收集的值

    #include <iostream>
    using namespace std;

    int Mystery ( int n)
    {
    //  int k;
if(n<=1)
   {

    return 0;
   }
else
{
  int  k=n;
    for(int i=1;i<=n;i++)
    {
        k=k+5;

    }
   cout<< ((k* (n/2)) + (8* (n/4)));
   cout<<"\n ";
    return ((k* Mystery(n/2)) + (8* Mystery(n/4)));

}

}

int main(void){int i,n;

cout<<"Enter n:";//array size
cin>>n;



int result = Mystery(n);
cout<< "The result is "<<result;

return 0;

}


共2个答案

匿名用户

让我们在桌面上检查一下当您调用神秘(2)时会发生什么。 最终返回值为:

((k* Mystery(n/2)) + (8* Mystery(n/4)))

我们知道n==2,所以让我们替换它:

((k* Mystery(1)) + (8* Mystery(0 /* by integer division of 2/4 */)))

这将使用各自的参数10递归调用函数两次。 但是我们知道终止大小写n<=1返回0,因此我们可以将其替换为:

((k* 0) + (8* 0))

任何与零相乘的东西都是零,因此这就简化为0+0,也是零。 甚至连k是什么都不重要。

很简单,这种递归的终止情况要求结果始终为零。

  • 在终止大小写中,返回值为零。
  • 在递归情况下,递归调用结果与另一个值相乘以产生返回值。
  • 因此,对于任何n,结果总是为零。

我不确定这个函数应该如何工作,因为您没有解释过,但是将终止大小写更改为return1;可能会解决这个问题。

匿名用户

我不期望你想要哪个结果,但我认为你可以得到写结果,当你纠正的条件,如

if (n == 0)
  return 0;
if (n == 1)
  return 1;

我希望它返回正确的结果。