Java Recursion
Java Recursion
Recursion သည် function call ကိုယ်တိုင်ပြုလုပ်သည့်နည်းပညာဖြစ်သည်။ ဤနည်းပညာသည် ရှုပ်ထွေးသောပြဿနာများကို ဖြေရှင်းရန်ပိုမိုလွယ်ကူသည့် ရိုးရှင်းသောပြဿနာများအဖြစ်သို့ ခွဲခြမ်းရန်နည်းလမ်းကို ထောက်ပံ့ပေးသည်။
Recursion သည် နားလည်ရန် အနည်းငယ်ခက်ခဲပေမည်။ မည်ကဲ့သို့ အလုပ်လုပ်သည်ကို အဖြေရှာရန် အကောင်းဆုံးနည်းလမ်းမှာ ၎င်းကို စမ်းသပ်ခြင်းဖြစ်သည်။
Recursion ဥပမာ
ဂဏန်းနှစ်လုံးကို ပေါင်းထည့်ခြင်းသည် လွယ်ကူသော်လည်း ဂဏန်းအကွာအဝေးကို ပေါင်းထည့်ခြင်းသည် ပို၍ ရှုပ်ထွေးပါသည်။ အောက်ပါဥပမာတွင်၊ နံပါတ်နှစ်ခုပေါင်းထည့်ခြင်း၏ရိုးရှင်းသောလုပ်ဆောင်မှုအဖြစ်သို့ခွဲထုတ်ခြင်းဖြင့် ဂဏန်းအကွာအဝေးကိုအတူတကွပေါင်းထည့်ရန် ပြန်လှန်ခြင်းကိုအသုံးပြုသည်-
ဥပမာ
နံပါတ်များအားလုံးကို 10 အထိထည့်ရန် recursion ကိုသုံးပါ။
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
နမူနာရှင်းပြထားပါတယ်။
sum()
လုပ်ဆောင်ချက်ကို ခေါ်သောအခါ၊ ၎င်းသည် ကိန်းဂဏန်းများ k
ထက်သေးငယ်သော ကိန်းဂဏာန်းအားလုံးကို ပေါင်းစည်း k
ပြီး ရလဒ်ကို ပြန်ပေးသည်။ k သည် 0 ဖြစ်သွားသောအခါ၊ function သည် 0 သာ ပြန်ဖြစ်သွားသည်။ ပရိုဂရမ်သည် အလုပ်လုပ်သောအခါတွင် အောက်ပါအဆင့်များအတိုင်း လုပ်ဆောင်သည်။
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + ပေါင်း(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
လုပ်ဆောင်ချက်သည် 0 ဖြစ်သည့်အခါ သူ့ဘာသာသူ မခေါ်သောကြောင့် k
၊ ပရိုဂရမ်သည် ထိုနေရာတွင် ရပ်သွားပြီး ရလဒ်ကို ပြန်ပေးသည်။
ရပ်တန့်မှုအခြေအနေ
loops များသည် အဆုံးမရှိ looping ပြဿနာသို့ လည်ပတ်နိုင်သကဲ့သို့၊ recursive functions များသည် infinite recursion ပြဿနာသို့ လည်ပတ်နိုင်သည်။ Infinite recursion သည် function သည် သူ့ဘာသာသူခေါ်ဆိုခြင်း ဘယ်သောအခါမှ မရပ်တော့ပါ။ recursive function တိုင်းတွင် halting condition တစ်ခုရှိသင့်သည်၊ ၎င်းသည် function သည် သူ့ဘာသာသူခေါ်ဆိုမှုရပ်တန့်သွားသည့်အခြေအနေဖြစ်သည်။ k
ယခင်ဥပမာတွင်၊ parameter သည် 0 ဖြစ်သွားသော အခါတွင် halting condition ဖြစ်သည်။
သဘောတရားကို ပိုနားလည်ရန် မတူညီသော ဥပမာများစွာကို ကြည့်ရှုရန် အထောက်အကူဖြစ်စေသည်။ ဤဥပမာတွင်၊ လုပ်ဆောင်ချက်သည် အစနှင့်အဆုံးကြားရှိ နံပါတ်အကွာအဝေးကို ပေါင်းထည့်သည်။ ဤ recursive လုပ်ဆောင်ချက်အတွက် ရပ်ဆိုင်းသည့်အခြေအနေမှာ အဆုံး သည် စတင်သည် ထက် မပို သောအခါ ဖြစ်သည်
ဥပမာ
5 မှ 10 ကြား ဂဏန်းများအားလုံးကို ထည့်ရန် recursion ကိုသုံးပါ။
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }