【问题标题】:Problem with summ formula when i use a for loop in main method当我在 main 方法中使用 for 循环时,求和公式出现问题
【发布时间】:2020-06-22 19:54:57
【问题描述】:

这是我的求和递归函数代码。该函数运行良好,但是当我在 main 方法中使用 for 循环以给出所有总和直到 10 时,系统停止工作,我对此没有任何解释。当我移除 for 循环时,系统再次完全正常。我得到的错误如下: Thread 1: EXC_BAD_ACCESS (code=2, address

#include <iostream>
using namespace std;

int summ(int x) {
    if(x == 1)

    {
        return 1;
    }

    else {
        return summ(x - 1) + x;
    }
}

int main()
{
    int const n = 10;

    for(int i = 0; i < n; i++)

    {
        cout << summ(i) << " " << endl;
    }

    return 0;
}

【问题讨论】:

  • 该功能运行良好 - 用于什么输入?请注意,当x &lt;= 0 时,您的函数将永远递归(或至少直到x 一直循环)。也许summ的停止条件应该是if(x &lt;= 1)
  • 尝试将int i = 0;更改为int i = 1;
  • Arthur:这仍然被列为未回答的问题。没有任何答案可以帮助您解决问题吗?

标签: c++ function for-loop recursion sum


【解决方案1】:

在您的第一次迭代中 i = 0 这意味着 summ 将错过您的终止条件 (if(x == 1))。然后它会递归summ(x-1) 并继续向下递归直到堆栈溢出。

【讨论】:

    【解决方案2】:

    当参数为零时,递归函数无法正确处理参数。

    按如下方式重写函数

    unsigned long long summ( unsigned int x ) 
    {
        return x == 0 ? 0 : x + summ( x - 1 );
    }
    

    如果要计算非负数的总和,则将参数声明为有符号整数类型是没有意义的。

    这是一个演示程序

    #include <iostream>
    
    unsigned long long summ( unsigned int x ) 
    {
        return x == 0 ? 0 : x + summ( x - 1 );
    }
    
    int main() 
    {
        const unsigned int N = 10;
    
        for ( unsigned int i = 0; i < N; i++ )
        {
            std::cout << summ( i ) << ' ';
        }
        std::cout << '\n';
    
        return 0;
    }
    

    程序输出是

    0 1 3 6 10 15 21 28 36 45 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2020-03-15
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      相关资源
      最近更新 更多