Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Java Kodu Yardım


SpiderS_DangeR

Öne çıkan mesajlar

Şimdik şöyle bi kod yazıcam.
P(a,b) ikilisi var, yazıcağım kod a sayısının b sayının toplamı olarak kaç farklı şekilde yazılabileceğini buluyor. Örn: P(4,2)
4=3+1 ve 2+2. P(4,3) olsaydı sadece 1+1+2 olucaktı vs.
Elimizde şu bilgiler var
P(a,b) için a=b ise 1 şekilde,
a b=2 için a/b nin aşağı yuvarlanmış hali şekilde yazılabiliyor. Örn: P(7,2) için (7/2)=(3,5)=3 farklı şekilde.
Ayrıca P(a,b) = P(a-1,b-1)+P(a-b,b) olduğunu biliyoruz. Amaç verilen a b ikilisini en son yazdığım işlemi gerçekleştirerek yukardaki bildiğimiz ikililere indirmek. Örn:
P(9,4) = P(8,3) + P(5,4)
= P(7,2) + P(5,3) + P(4,3) + P(1,4)
Mesela buraya kadar getirdikten sonra P(7,2) ikilisinin kaç şekilde yazılabildiğini(3) ve P(1,4) ikilisinin 0 şekilde yazılabildğini biliyoruz. Aynı işlemi P(5,3) ve P(4,3) ikilisine yaparak sonuca ulaşmaya çalışıyoruz. Fakat bunu yapan bir kod yazmak için nasıl bir yol izleyeceğimi bir türlü bulamadım. Help plz
Link to comment
Sosyal ağlarda paylaş

Sen kendin nerdeyse kodu yazmışsın yani. Javada büyük ihtimalle recursive kodu öğretmedikleri için yapamıyosun :D Önce kontrol ediceksin b 2 mi veya a=b mi diye eğer 2'yse floor(a/b) yi return ediceksin. Yok değilse "return P(a-1,b-1)+P(a-b,b);" diyceksin. Küçüle küçüle ya b 2'ye varcak ya a ve b eşitlenicek veya a b'den küçük olucak. En sonunda hepsi birbiyle toplanmış olcak ve ilk çağırdığın P sonucu vercek.
Link to comment
Sosyal ağlarda paylaş

El-Barto yazmış işte?

İlk önce fonksiyonu matematiksel olarak yazmaya çalış. Aşağı yukarı şöyle bir şey olması lazım:


{ 0, if x < y
p(x, y) = { 1, if y = 1
{ roundDown(x / 2), if y = 2
{ p(x - 1, y - 1) + p(x - y, y), otherwise


p fonksiyonun tanımında kendini çağırdığın için rekursiv fonksiyon deniyor. Rekursiv fonksiyon çağırırken argümanların bir şekilde küçülmesi lazım ki bir yerden sonra rekursiv çağrı dursun. Yoksa stack dolana kadar döner durursun.

Zaten senin durumunda argümanlar küçülüyor. Bir yerden sonra y 1 ya da 2 ye kadar küçülecek ya da y x'ten büyük hale gelecek ve sonuç çıkacak ortaya.

Edit: Rekursif fonksiyonların nasıl çalıştığını anlamakta zorluk çekiyorsan ilk önce rekursif olarak faktöryel hesaplayan ya da OBEB alan bir fonksiyon yaz. Hatta ikisini de yaz. :)
Link to comment
Sosyal ağlarda paylaş

Hiç unutmuyorum ilk programlama dersinin ilk gününde rekürsifi öğrenmiştik ve fonksiyon faktoriyel buluyodu. Sanırım en rahat anlaşılan örnek odur :D Şöyle oluyo fonksiyon:
Faktoriyel(4) diye çağırıyosun
sonuç return Faktoriyel(3)*4;
Faktoriyel(3)in sonucu return Faktoriyel(2) * 3
Faktoriyel(2)in sonucu return Faktoriyel(1) * 2
Faktoriyel(1)in sonucu return 1 (çünkü içerde bi ifle hep kontrol ediyosun aldığın sayı 1mi diye.
Sonuç olarak en dıştaki fonksiyon şu sonucu vermiş oluyo:
return (((1*2) * 3) * 4);
Bunda da anlatamadıysam tam olarak kodu yazıp yollucam artık lütfen anla :D
Link to comment
Sosyal ağlarda paylaş

yaptım ahahdsafhsdaf

import java.util.Scanner;
public class holyholy {
static int c = 0;
public static void ahmet(int a, int b)
{

if(a < b)
{

}
else if(a == b)
{
c++;

}
else if(b == 2)
{
c = (int) (c+(Math.floor(a/b)));

}
else
{
System.out.println("Son else e girdi");
ahmet(a-1,b-1);
ahmet(a-b,b);

}
}

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
System.out.print("İki sayı girin: ");
int a = sc.nextInt();
int b = sc.nextInt();

ahmet(a,b);
System.out.println(c);

}
}
Link to comment
Sosyal ağlarda paylaş

×
  • Yeni Oluştur...