C# ile Recursive İşlemler

 

 

C# Console ortamında benim yazdığım Recursive fonksiyonları kullanarak faktöriyel, fibonacci ve tribonacci değerlerini hesaplayan girilen taban ve üs değerlerine göre hesaplama yapan ve asal sayı kontrolü yapan bir programdır.

 

Recursive fonksiyonları dilimize Özyenilemeli Algoritmalar olarak çevirebiliriz. Peki nedir bu özyenilemeli algoritmalar?

Özyinemeli algoritmalar içine koyacağınız basit bir şart gerçekleşene kadar kendini çağıran ve yaptırmak istediğiniz işi yapan fonksiyonlardır. Recursive fonksiyonların yazımı ve kullanımı genel olarak methodlara benzer. Recursive fonksiyonlar tanımlanırken static veya public ve dönüş tipide mutlaka return ile ifade edilmelidir. Daha iyi anlamanız için aşağıda recursive fonksiyonlarla yazılmış, çeşitli işlemleri yapan kodları paylaşıyorum.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
 
namespace RecursiveFonksiyon
{
    class Program
    {
 
 
        static int faktoriyel(int sayi)
        {  
            if (sayi == 0)
                return 1;
            else
                return sayi*faktoriyel(sayi-1);
        }
 
        static int usalma(int taban, int us)
        {
            if (us == 0)
                return 1;
            else
                return taban*usalma(taban,us-1);
        }
 
        static int fibonacci(int sayi)
        {
            if (sayi < 1)
            {
                return 0;
            }
            else if (sayi == 1)
            {
                return 1;
            }
            else
            {
                return fibonacci(sayi - 1) + fibonacci(sayi - 2);
            }
 
        }
 
        static int tribonacci(int sayi)
        {
 
            if (sayi == 0 )
            {
                return 0;
 
            }
            if (sayi == 1 || sayi == 2)
            {
                return 1;
 
            }
            else 
            {
                return tribonacci(sayi - 1) + tribonacci(sayi - 2)+ tribonacci(sayi - 3);
            }
        }
 
        static void asalkontrol(int sayi)
        {
            int aklimda = 0;
            if (sayi == 0 || sayi == 1)
            {
                Console.WriteLine("En küçük asal sayı 2 dir.");
            }
            else
            {
                for (int i = 2; i < (sayi / 2) + 1; i++)
                {
                    if (sayi % i == 0)
                    {
                        aklimda++;
                    }
 
                }
                if (aklimda >= 1)
                {
                    Console.WriteLine("Girilen {0} sayısı Asal sayı değildir.",sayi);
                }
                else
                {
                    Console.WriteLine("Girilen {0} sayısı Asal sayıdır.",sayi);
                }
            }
 
 
        }
 
        static void Main(string[] args)
        {
            char cevap;
            try
            {
                int secim=0;
                int a=1;
                do
                {
                    Console.Clear();
                    //-------
                    Console.Title = "www.semihduran.com";
                    Console.WriteLine("<<<<<   © 2011 Semih DURAN www.semihduran.com   >>>>>");
                    Console.WriteLine();
                    Console.WriteLine("C# Recursive Fonksiyonları Kullanarak Faktöriyel-Üs Alma-Fibonacci-Tribonacci" + "   " +
                        "Hesaplama ve Asal Sayı Kontrol Programı");
                    Console.WriteLine();
                    //------
                    Console.WriteLine("1--> Faktöriyel Hesaplama");
                    Console.WriteLine("2--> Üs Alma");
                    Console.WriteLine("3--> Fibonacci Hesaplama");
                    Console.WriteLine("4--> Tribonacci Hesaplama");
                    Console.WriteLine("5--> Asal Sayı Kontrol Etme");
                    Console.WriteLine("6--> Çıkış");
                    do
                    {
                    Console.Write("Lütfen yukarıdaki işlemlerden birini seçerek ENTER'a basın :");
                    secim = Convert.ToByte(Console.ReadLine());
                    }while (secim<1 || secim>6);
 
                    switch(secim)
                    {
                        case 1:
                            Console.WriteLine();
                            Console.WriteLine("Faktöriyel hesaplama bölümüne hoş geldiniz.");
 
                            Console.WriteLine("Lütfen faktöriyelini hesaplamak istediğiniz sayıyı girin :");
                            int x=Convert.ToInt32(Console.ReadLine());
 
                            Console.WriteLine("{0} sayısının faktöriyeli {1} olarak hesaplanmıştır.",x,faktoriyel(x));
                            break;
 
                        case 2:
                            Console.WriteLine();
                            Console.WriteLine("Üs alma bölümüne hoş geldiniz.");
 
                            Console.WriteLine("Lütfen taban değerini girin :");
                            int taban = Convert.ToInt32(Console.ReadLine());
 
                            Console.WriteLine("Lütfen üs değerini girin :");
                            int us = Convert.ToInt32(Console.ReadLine());
 
                            Console.WriteLine("{0} üzeri {1} {2} olarak hesaplanmıştır.",taban,us,usalma(taban,us));
                            break;
 
                        case 3 :
                            Console.WriteLine();
                            Console.WriteLine("Fibonacci hesaplama bölümüne hoş geldiniz.");
 
                            Console.WriteLine("Kaçıncı sıradaki fibonacci değerini görmek istiyorsunuz?");
                            int y = Convert.ToInt32(Console.ReadLine());
 
                            Console.WriteLine("{0}. sıradaki fibonacci değeri {1} olarak hesaplanmıştır.",y,fibonacci(y));
                            break;
 
                        case 4 :
                            Console.WriteLine();
                            Console.WriteLine("Tribonacci hesaplama bölümüne hoş geldiniz.");
 
                            Console.WriteLine("Kaçıncı sıradaki tribonacci değerini görmek istiyorsunuz?");
                            int z = Convert.ToInt32(Console.ReadLine());
 
                            Console.WriteLine("{0}. sıradaki tribonacci değeri {1} olarak hesaplanmıştır.",z,tribonacci(z));
                            break;
 
                        case 5 :
                            Console.WriteLine();
                            Console.WriteLine("Asal sayı kontrol bölümüne hoş geldiniz.");
 
                            Console.WriteLine("Asal sayı olup olmadığını kontrol etmek istediğiniz sayıyı girin :");
                            int n =Convert.ToInt32(Console.ReadLine());
 
                            asalkontrol(n);
                            break;
 
                        case 6 :
                            a = 2;
                            break;
                    }
 
                    if (a == 1)
                    {
                        Console.WriteLine();
                        Console.WriteLine("Programı kullanarak tekrar hesaplama yapmak ister misiniz? e/h");
                        cevap = Convert.ToChar(Console.ReadLine());
                    }
                    else
                    {
                        Console.WriteLine();
                        Console.WriteLine("Daha fazlası için www.semihduran.com");
                        Thread.Sleep(2000);
                        return;
                    }
 
                } while (cevap == 'e' || cevap == 'E');
 
                Console.WriteLine();
                Console.WriteLine("Daha fazlası için www.semihduran.com");
                Thread.Sleep(2000);
 
            }
            catch
            {
                Console.WriteLine("Geçersiz giriş yapıldı. Program 3 saniye sonra kapatılacak.");
                Thread.Sleep(3000);
            }
 
        }
    }
}

 

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. Tolunay Sadik dedi ki:

    Tesekkürler öncellikle ancak bir türlü istediğimi yapamadım ödevim var ve yarın teslim etmem gerekiyor bayağı uğraştım kodlarla ancak bir yerlerde hata yapıyorum ödev şu : Klavyeden girilen sayılar üzerinde işlem tipine göre aşağıdaki işlemlerden birisi gerçekleştirilecektir.

    İşlem tipleri

    a – Aritmetik Ortalama
    b- Geometrik Ortalama
    c- Girilen Sayıların En Büyüğü
    d- Girilen Sayıların En Küçüğü

    Bu işlemleri gerçekleştiren programı C# konsol uygulaması ile yazınız. Bana yardımcı olabilirmisiniz? Basit birşey ama yapamadım üzgünüm.
    Yardım ederseniz minnetar kalırım, etmezseniz de canınız sağolsun iyi çalışmalar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir