如果我更改函数输入,我的递归不起作用?

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。