C#斐波那契序列复制

C#斐波那契序列复制,c#,if-statement,while-loop,C#,If Statement,While Loop,我试图解决Euler项目的第二个问题,问题是: 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 求序列中所有不超过400万的偶数值项之和 因此,我设立了以下机构: using System; namespace ProjectEuler { class Question2 { //Project Euler - Question 2 //Each new te

我试图解决Euler项目的第二个问题,问题是:

斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是:

1、2、3、5、8、13、21、34、55、89

求序列中所有不超过400万的偶数值项之和

因此,我设立了以下机构:

using System;

namespace ProjectEuler
{
    class Question2
    {
        //Project Euler - Question 2
        //Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
        //1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
        //Find the sum of all the even-valued terms in the sequence which do not exceed four million
        static void Main()
        {
            int sum = 0;

            int oldNumber = 1;
            int currentNumber = 1;
            int nextNumber;

            while (currentNumber <= 500)
            {
                nextNumber = currentNumber + oldNumber;

                if (nextNumber % 2 == 0)
                {
                    sum += currentNumber;
                }
            }

            Console.WriteLine("Project Euler - Question 2\n\nAnswer: " + sum);
            Console.ReadLine();
        }
    }
}
使用系统;
命名空间ProjectEuler
{
课堂问题2
{
//欧拉项目-问题2
//斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10项将是:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//求序列中所有不超过四百万的偶数项之和
静态void Main()
{
整数和=0;
整数=1;
int currentNumber=1;
int nextNumber;

而(currentNumber您没有结束循环的条件。您永远不会将currentNumber的值更改为1以外的任何值

您可能需要以下内容:

nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;
nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;

您没有结束循环的条件。您永远不会将currentNumber的值更改为1以外的任何值

您可能需要以下内容:

nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;
nextNumber = currentNumber + oldNumber;
oldNumber = currentNumber;
currentNumber = nextNumber;

不,它没有被更新,你有一个无限循环

思考斐波那契序列的一个更简单的方法是,下一个值是前两个值的总和

0 1。下一个是1 接下来是2(1+1) 接下来是3(1+2) 接下来是5(2+5)


因此,请跟踪最后两个值,并使用这两个值创建下一个值。

不,它不会被更新,并且您有一个无限循环

思考斐波那契序列的一个更简单的方法是,下一个值是前两个值的总和

0 1。下一个是1 接下来是2(1+1) 接下来是3(1+2) 接下来是5(2+5)


因此,请跟踪最后两个值,并使用这两个值创建下一个值。

您是对的,问题在于
currentNumber
从未更新。请再次查看斐波那契序列:

F(n+2) = F(n+1) + F(n)
         ^ currentNumber
^ nextNumber      ^ oldNumber
在下一次迭代中:

F(n+3) = F(n+2) + F(n+1)
         ^ currentNumber
^ nextNumber      ^ oldNumber
请注意,变量被向右移动一个位置,最早的数字被丢弃。因此,您需要执行以下操作:


你是对的,问题是因为
currentNumber
从未更新。请再次查看斐波那契序列:

F(n+2) = F(n+1) + F(n)
         ^ currentNumber
^ nextNumber      ^ oldNumber
在下一次迭代中:

F(n+3) = F(n+2) + F(n+1)
         ^ currentNumber
^ nextNumber      ^ oldNumber
请注意,变量被向右移动一个位置,最早的数字被丢弃。因此,您需要执行以下操作:

使用系统;
命名空间ProjectEuler
{
课堂问题2
{
//欧拉项目-问题2
//斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10项将是:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//求序列中所有不超过四百万的偶数项之和
静态void Main()
{
整数和=0;
int currentNumber=1;
int lastNumber=0;
当(currentNumber
使用系统时;
命名空间ProjectEuler
{
课堂问题2
{
//欧拉项目-问题2
//斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10项将是:
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
//求序列中所有不超过四百万的偶数项之和
静态void Main()
{
整数和=0;
int currentNumber=1;
int lastNumber=0;
while(currentNumber
static void Main(字符串[]args)
{
var总和=0;
foreach(GetEvenFibonacciSeries()中的变量号)
{
如果(总和+数字>4000000)
打破
总和+=数字;
}
控制台写入线(总和);
}
私有静态IEnumerable GetEvenFibonacciSeries()
{
var first=0;
var秒=1;
var-next=0;
while(true)
{
下一个=第一个+第二个;
第一=第二;
第二个=下一个;
如果(下一个%2==0)
其次是收益率;
}
}
静态void Main(字符串[]args)
{
var总和=0;
foreach(GetEvenFibonacciSeries()中的变量号)
{
如果(总和+数字>4000000)
打破
总和+=数字;
}
控制台写入线(总和);
}
私有静态IEnumerable GetEvenFibonacciSeries()
{
var first=0;
var秒=1;
var-next=0;
while(true)
{
下一个=第一个+第二个;
第一=第二;
第二个=下一个;
如果(下一个%2==0)
其次是收益率;
}
}