不在递归中迭代

3

我已经编写了一段代码来解决一个问题。 这是问题的链接:https://brilliant.org/practice/bijections-overview/?p=2 我的建议是使用递归。我有3个元素要相加得到5,我从0到5迭代单个元素。

这是我的代码:

#include<bits/stdc++.h>
using namespace std;

int count_sum_5(int sum, int n)
{   
    if(n == 1) return 1;
    for(int i = 0; i <= sum ; i++){
        return 1 + count_sum_5(sum - i, n - 1);
    }
}

int main()
{
    int sum = 5;
    int count_ele = 3;
    cout << count_sum_5(sum, count_ele);
}

它的输出结果是3,我认为它只在i=0时运行,而不在i=1,2,3,4,5时运行。你能帮我吗?


for循环内的返回语句将在第一次迭代中从count_sum_5函数中返回,进一步的循环迭代将不会继续。您必须在for循环外编写返回语句。 - Gopi
链接可能在未来失效。问题描述应在问题中说明。 - Dialecticus
你的链接无法使用,请在问题中解释 - 不清楚该函数应该完成什么任务。 - molbdnilo
3个回答

1
如果 n 为 1,则您的函数将返回 1。否则,它将进入 for 循环,其将返回第一次迭代的值。您通过传递分别为 5 和 3 来调用您的函数。
第一次调用: 它返回 1 + count_sum_5(5, 2)
第二次调用: 它返回 1 + count_sum_5(5, 1)
第三次调用: 它返回 1
因此,第二次调用将计算为 1 + 1 = 2,然后第二次调用将计算为 1 + 2 = 3。我不确定您的意图是什么,但您的递归不需要 for 循环。您的函数相当于
int count_sum_5(int sum, int n)
{   
    if(n == 1) return 1;
    return 1 + count_sum_5(sum, n - 1);
}

我不确定您是否对此满意。如果不满意,请告诉我您想要实现什么,提供示例输入和输出会有所帮助。如果您提供更多信息,我会相应地编辑我的答案。


0

我不知道你具体想通过那个解决什么问题。但是 For 循环只会为 i=0 运行一次,因为它一旦计算了 1+count_sum(sum-i, n-1),就会将其返回。

然而,你可以进行以下更改:

#include<bits/stdc++.h>
using namespace std;

int count_sum_5(int sum, int n)
{   
    if(n == 1) return 1;
    int temp = 0;
    for(int i = 0; i <= sum ; i++){
        temp += (1 + count_sum_5(sum - i, n - 1));
    }
    return temp;
}

int main()
{
    int sum = 5
    int count_ele = 3;
    cout << count_sum_5(sum, count_ele);
}

0

return 会评估 1 + count_sum_5(sum - i, n - 1),然后在循环的第一次迭代中立即退出整个函数。无法多次从一个函数返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接