【问题标题】:for loop done without meeting the condition I setfor 循环在不满足我设置的条件的情况下完成
【发布时间】:2021-07-14 11:30:37
【问题描述】:
#include <iostream>
#include <vector>

using namespace std;

int main()
{  
    int n = 5;
    int nums[] = {0 ,1};
    if (n == 0)
    {
        return 0;
    } else if (n == 1)
    {
        return 1;
    } else{
        for (int i = 2; i < n + 1; i++)
        {   
            cout << i << endl;
            nums[i] = nums[i-2] + nums[i-1];

        }
        return nums[n]
    }
    return 0;
}

这只是一个简单的斐波那契数组,但我的代码只给出了 stdout 一次,它是两次。仅供参考:此代码可能不正确计算斐波那契数组的第 n 项,但我正在努力解决这个 for 循环。

我认为 i

【问题讨论】:

  • nums[i] 的大小为 2。对于 i &gt;= 2,您无法访问 nums[i]。数组不会增长。您无法更改数组的大小。使用std::vector。您已经包含了标题。
  • 谢谢你,你是对的!
  • 对于n 等于5i 是:2、3、4、5,条件i &lt; n+1 满足4 次,如果这是您要求的。那么int nums[]原始数组不适合动态改变数组,改用std::vector

标签: c++ fibonacci


【解决方案1】:

您必须为数组提供估计大小,否则您将创建向量或一些动态数组。 您的方法总是给出分段错误;

#include <iostream>
#include <vector>
using namespace std;
int main()
{  
    int n = 5;
    vector<int> nums(n+1);
    nums[0]=0;
    nums[1]=1;
    if (n == 0)
    {
        return 0;
    } else if (n == 1)
    {
        return 1;
    } else{
        for (int i = 2; i < n + 1; i++)
        {   
            // cout << i << endl;
            nums[i] = nums[i-2] + nums[i-1];

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

            cout<<nums[i]<<endl;        }
    }
    return 0;
}
*/

【讨论】:

  • 您的向量大小减少了 1。nums[i] = nums[i-2] + nums[i-1]; 导致 i == n 出现未定义的行为。
【解决方案2】:

这是因为您无法访问 nums[2] 所以您的代码的正确版本是:

#include <iostream>
#include <vector>

using namespace std;

int main()
{  
    int n = 5;
    int nums[5] = {0 ,1};
    if (n == 0)
    {
        return 0;
    } else if (n == 1)
    {
        return 1;
    } else{
        for (int i = 2; i < n + 1; i++)
        {   
            cout << i << endl;
            nums[i] = nums[i-2] + nums[i-1];

        }
        return nums[n]
    }
    return 0;
}

【讨论】:

  • 您的向量大小减少了 1。nums[i] = nums[i-2] + nums[i-1]; 导致 i == n 出现未定义的行为。
【解决方案3】:

nums[i] 的大小为 2。对于 i &gt;= 2,您无法访问 nums[i]。数组不会增长。您无法更改数组的大小。使用std::vector。您已经包含了标题。 return 语句完成一个函数。在 main 函数的情况下,它会导致程序停止。按照惯例,主函数的返回值描述了程序是成功还是发生错误。你回来了

return nums[n];

这可能不是你的意图。我假设你想打印矢量。

#include <iostream>
#include <vector>

using namespace std;

int main()
{  
    int n = 5;
    std::vector<int> nums {0 ,1};
    if (n == 0)
    {
        return 0;
    } else if (n == 1) {
        return 1;
    } else {
        nums.reserve(n + 1);
        for (int i = 2; i < n + 1; i++)
        {   
            cout << i << '\n';
            nums.emplace_back(nums[i-2] + nums[i-1]);

        }
        for (const auto num : nums)
        {   
            cout << num << '\n';

        }
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多