首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我更改函数输入,我的递归就不能工作?

如果我更改函数输入,我的递归就不能工作?
EN

Stack Overflow用户
提问于 2020-05-11 21:53:00
回答 1查看 74关注 0票数 0

我的递归函数停止执行,根本不工作。但是,如果我改变了递归的输入公式,那么它就能很好地工作。有人能告诉我我哪里做错了吗?

我的意思是,如果在递归公式中使用n/2而不是(n+1)/2(n-1)/2,那么它就有效了。如果我用得更清楚;

代码语言:javascript
复制
return 2*f(n/2)+f(n/2)+7*n-7 

而不是

代码语言:javascript
复制
return 2*f((n+1)/2)+f((n-1)/2)+7*n-7

然后它就工作了,否则,它就会停止执行。这一切为什么要发生?

代码语言:javascript
复制
#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; 
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61740047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档