我希望结果是从神秘函数返回的值,但是结果总是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)
时会发生什么。 最终返回值为:
((k* Mystery(n/2)) + (8* Mystery(n/4)))
我们知道n==2
,所以让我们替换它:
((k* Mystery(1)) + (8* Mystery(0 /* by integer division of 2/4 */)))
这将使用各自的参数1
和0
递归调用函数两次。 但是我们知道终止大小写n<=1
返回0,因此我们可以将其替换为:
((k* 0) + (8* 0))
任何与零相乘的东西都是零,因此这就简化为0+0
,也是零。 甚至连k
是什么都不重要。
很简单,这种递归的终止情况要求结果始终为零。
n
,结果总是为零。
我不确定这个函数应该如何工作,因为您没有解释过,但是将终止大小写更改为return1;
可能会解决这个问题。
我不期望你想要哪个结果,但我认为你可以得到写结果,当你纠正的条件,如
if (n == 0)
return 0;
if (n == 1)
return 1;
我希望它返回正确的结果。