【问题标题】:Does not iterate in recursion不递归迭代
【发布时间】:2021-11-09 11:49:15
【问题描述】:

我已经编写了一个代码来解决一个问题。 这是问题的链接: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循环内的return语句将在第一次迭代本身中从函数count_sum_5函数返回,进一步的循环迭代将不会继续。您必须在 for 循环之外编写 return 语句。
  • 该链接将来可能会失效。问题描述应在问题中说明。
  • 您的链接无效。请在问题中解释 - 目前还不清楚该功能应该完成什么。

标签: c++ recursion sum iteration


【解决方案1】:

如果n 为1,您的函数将return 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);
}

我不确定您对此是否满意。如果没有,那么请让我知道您打算实现什么,示例输入和输出会有所帮助。如果您提供更多信息,那么我将相应地编辑我的答案。

【讨论】:

    【解决方案2】:

    我不知道您到底想用它解决什么问题。但是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);
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-17
        • 2019-12-10
        • 2011-11-14
        • 1970-01-01
        • 2012-04-26
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多