2016-06-28 81 views
0

我有一個方法rand2() 0123h隨機。遞歸函數有多少個基本情況?

我想創建一個方法 rand3()將使用rand2()return 0,1,2 以相等的概率。

我想出了一個遞歸解決方案,考慮4個0,1的組合。

總而言之,我寫了這個函數,有超過1個基本情況,希望它能起作用。

但似乎recusive函數不能有多個基本情況。

這裏是我的代碼:

public static int rand3(){ 
     String str = ""; 
     str+= rand2(); 
     str+= rand2(); 
     System.out.println(str); 

     if(str=="00") 
      return 0; 
     else if(str=="11") 
      return 1; 
     else if(str=="01") 
      return 2;   
     else 
      return rand3(); 
    } 

我缺少什麼?

回答

0

但似乎recusive函數不能有一個以上的基本情況。

這是不正確的。遞歸函數可以具有所需的基本情況。 (並且一些遞歸函數肯定需要多於一個函數;例如遞歸斐波納契函數)。

總而言之,我寫了這個函數,它有超過1個基本情況,希望它能起作用。

是什麼讓你覺得它不起作用?


有點想法,你可以重構該代碼,以便只有一個基本情況。

提示:RAND2()返回整數...你可以對整數加法和乘法

+0

'RAND2()+ RAND 2();這個等式給出了1 0 2 1不唯一。但是2 * rand2()+ rand2();這一個給出了0 1 2 3唯一合適的基本情況是'if(randSum <3)return randSum;'它的工作;這是你想過的嗎? –

+0

是的。這就是我暗示的。 –

0

我不太明白你爲什麼需要遞歸(除非它是一門學術課程)。只需將if塊封裝在一個循環中,並在前三個選項中的任意一箇中跳出循環,而讓第四個替代循環在循環中重新運行。

請注意,您還需要在循環中包含str的分配。