我的递归函数停止执行,根本不工作。但是,如果我改变了递归的输入公式,那么它就能很好地工作。有人能告诉我我哪里做错了吗?
我的意思是,如果在递归公式中使用n/2而不是(n+1)/2和(n-1)/2,那么它就有效了。如果我用得更清楚;
return 2*f(n/2)+f(n/2)+7*n-7 而不是
return 2*f((n+1)/2)+f((n-1)/2)+7*n-7然后它就工作了,否则,它就会停止执行。这一切为什么要发生?
#include<stdlib.h>
#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
if (n == 1)
return 2;
return 2*f((n+1)/2)+f((n-1)/2)+7*n-7;
}
int main ()
{ int n;
cout<< " enter odd integer n value "<<"\n";
cin>> n;
cout<< "Total Cost is: "<< f(n)<<"\n";
getchar();
return 0;
} 发布于 2020-05-11 22:13:11
考虑一下当n=3时发生了什么。
首先调用f(3),然后调用f(2)和f(1)。
然后f(2)调用f(1)和f(0)。
f(1)由于基本情况正确工作,但是f(0)继续调用f(0)和f(-1)。这样你的递归就会永远持续下去。
正确的修复取决于函数应该做什么,但您可以考虑的一种可能性是使大小写n <= 1而不是n == 1。
https://stackoverflow.com/questions/61740047
复制相似问题