Czy dobrze wszystko jest zrobione?:)

0

Czesc, chcialem sie zapytac czy dobrze wszystko zrobilem piszac ten program,
mialem ciag Fibo... napisac w sposob rekuren, sekwencyjnie + na koncu zastosowac wzor Bineta:

 
using System;

namespace fibonacci
{
    class Program
    {
        public static long fib(long n)//rekurencyjnie
        {
            if (n == 0)
                return 0;
            if (n == 1)
                return 1;
            else
                return fib(n - 1) + fib(n - 2);
        }
    public static long fib_it(long n)//iteracja
        {
            int a = 0, b = 1;
            for (int i = 0; i < (n - 1); i++)
            {
                
                b += a;
                a = b - a;
            }
            return b;
}

        public static double Binet(long n)//wzor Bineta
        {
           
            if (n == 0) 
                return 0;
                
            else
                return 1 / Math.Sqrt(5) * ((Math.Pow(((1 + Math.Sqrt(5)) / 2), n)) - (Math.Pow(((1 - Math.Sqrt(5)) / 2), n)));
        }

        static void Main(string[] args)
        {
            string line;
            long n;

            

            Console.WriteLine("Ktory wyraz ciagu Fibonacciego obliczyc?:");
            line = Console.ReadLine();
            n = long.Parse(line);
            Program.fib(n);
            Console.WriteLine(n + " wyraz ciagu Fibonacciego:" + fib(n));
            Program.fib_it(n);
            Console.WriteLine(n + " wyraz ciagu Fibonacciego iteracja:" + fib_it(n));
            Program.Binet(n);
            Console.WriteLine(n + " wyraz ciagu ze wzoru Bineta:" + Binet(n));
            Console.ReadLine();
        }
        
    }
}
2

Dlaczego każdą z metod wołasz po 2x? Na przykład:

 
Program.fib(n); //ta linia jest niepotrzebna
Console.WriteLine(n + " wyraz ciagu Fibonacciego:" + fib(n)); 
Program.fib_it(n); //ta też
Console.WriteLine(n + " wyraz ciagu Fibonacciego iteracja:" + fib_it(n));
Program.Binet(n); //ani ta
Console.WriteLine(n + " wyraz ciagu ze wzoru Bineta:" + Binet(n));
0

w sumie racje , ale bardziej mnie zastanawia czy same implementacje sa dobrze napisane, szczegolnie za pomoca wzoru Bineta:)?

2

Przetestuj takie coś:

for(int n = 0; n < 50; n++)
{
	Console.WriteLine(n + ". " + fib(n) + " -- " + fib_it(n) + " -- " + Binet(n));
}
 

Jeśli wartości bedą się pokrywać ze sobą znaczy to, że działa jak powinno. Oczywiście zakładając, że nie ma błędów w pozostałych metodach.

0

pokrywaja sie:) dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1