如果我更改函数输入,我的递归不起作用?
My recursion does not work if I change the function input?
我的递归函数停止执行,根本不起作用。但是,如果我更改递归的输入公式,那么它就可以正常工作。有人可以告诉我我哪里做错了吗?
我的意思是,如果我使用 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;
}
考虑当 n=3 时发生的情况。
首先调用 f(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。
我的递归函数停止执行,根本不起作用。但是,如果我更改递归的输入公式,那么它就可以正常工作。有人可以告诉我我哪里做错了吗?
我的意思是,如果我使用 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;
}
考虑当 n=3 时发生的情况。
首先调用 f(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。