2016-04-14 22 views
-3

Bir egzersizi çözmek için yardıma ihtiyacım var. Bu yöntemde, x gücünün 2'si kadar olan yıldız sayısını ("*") basmam gerekiyor. Ben 2 gücünde 2 varsaYineleme ile "*" yazdırma

Örneğin, 4 yıldız işareti ("****") yazdırmalısınız;

Bana doğru sayı döndüren bir yöntem var, ama o yıldız işareti basmak için bu numarayı kullanarak sorunları var. kodunda çözümü vermeden,

public static int writeStars(int number) { 
    if (number == 0) { 
     return 1; 
    } else { 
     int number2 = 2 * writeStars(number - 1); 
     System.out.println(" number " + number2); 
     return number2; 
    } 
} 
+4

"ama sahip problemler o numarayı kullanarak giriş büyüklüğü Bu kod yardımcı olabilecek 0 olduğunda

sonlandırma koşulu olacak Bu yıldızları yazdırmak için. " - Bunlar hangi problemlerden olabilir? Yıldız baskı kodunuzun hiçbirini dahil etmediniz. – azurefrog

cevap

2

İşte sorunun çözümü için bir fikir:

İşte benim kodudur.

Düşünceleriniz gerçekleştirerek, doğru yolda olduklarına dair 2 x = 2 * 2 x-1. 2 x* karakterlerini yazdırmak için, 2 x-1kodunu iki kez yazdırabilirsiniz. Yinelemeli yönteminizde, temel durumunuz bir * karakterini yazdıracak ve özyineli durumunuzu yinelemeli aramayı, uygun şekilde ayarlanan değeri geçerek iki kez yapın.

+0

Teşekkür ederim, sorunu (çözüldü:? – Kasparas

0

Eğer Sonra yazdırmaya

int num = writeStars(someNum); 

olmalıdır İstemcinizdeki bir dönüş yöntemi olduğundan, sadece yapmak

for(int i=0; i < num; i++) 
    System.out.print("*"); 
1

Tek yön döngüsü için basit bir yaratmak için ihtiyacımız olan i-iterasyonda 2^(i-1) yıldız dizesi. Yani, 4 tekrar için (x = 4), her iterasyon için 8,4,2,1 yıldıza sahip olacaksınız. Her yineleme için yıldız dizesini döndürebilir ve son dizeyi elde etmek için bunları birleştirebilirsiniz.

public static String writeStars(int y) { 
    //y is 2^x 
    if(y == 0) 
     return ""; 
    int num_stars = y - y/2; 
    StringBuffer stars_Buffer = new StringBuffer(num_stars); 
    for (int i = 0; i < num_stars; i++){ 
     stars_Buffer.append(""); 
    } 
    return stars_Buffer.toString() + writeStars(y/2); 
} 

Çağrı writeStars girişli 2^x:

writeStars(Math.pow(2, x)); 
+1

Bu derleme denedin mi Sen yöntem döndürme türü 'int' bir' String' burada 'dönüşü ""' dönen konum Ayrıca, hiçbir noktalı virgül – robotlos

+0

sayesinde @robotlos, aman.. kötü. – trans1st0r