Python တွင် Recursion
Programming တွင် recursion ဟူသော အယူအဆရှိပြီး ၎င်းသည် function တစ်ခုက မိမိကိုယ်ကိုခေါ်သော အခြေအနေဖြစ်သည်။
ဥပမာ . ကောင်တာပါသော ရိုးရှင်းသည့် recursion
Recursion ကိုသုံး၍
1 မှ 10 အထိ ဂဏန်းများကို ထုတ်ကြည့်ကြပါစို့။
i = 1
def func():
global i
print(i)
i += 1
if i <= 10:
func() # ဤနေရာတွင် function သည် မိမိကိုယ်ကို ခေါ်ဆိုပါသည်။
func()
ဤကုဒ်၏လုပ်ဆောင်ပုံကို ဆွေးနွေးကြပါစို့။
ကျွန်ုပ်တို့တွင် global variable i နှင့်
function func ရှိပြီး၊ ၎င်း၏အတွင်းတွင်
console သို့ variable i ၏တန်ဖိုးကို ထုတ်ပြီးနောက်
တစ်ထပ်တိုးပေါင်းလိုက်သည်။
ကျွန်ုပ်တို့၏ variable i သည်
10 ထက်နည်းလျှင် သို့မဟုတ် ညီလျှင်
function ကို ထပ်မံခေါ်သည်။ variable i သည်
global variable ဖြစ်သောကြောင့်
function ကိုအသစ်ခေါ်တိုင်း ၎င်းထဲတွင်
ယခင်အခေါ်၌ သတ်မှတ်ခဲ့သော variable i ၏တန်ဖိုးရှိမည်။
i သည် 10 ထက် မကြီးမခြင်း
function သည် မိမိကိုယ်ကို ခေါ်နေမည်ဖြစ်သည်။
ကျွန်ုပ်တို့၏ကိစ္စတွင် function ကို
if မပါဘဲ စတင်မရပါ။ အကယ်၍ ဤသို့လုပ်ပါက
အဆုံးမဲ့ function ခေါ်ဆိုမှုများ ဖြစ်လာမည်။
ဥပမာ . အဆင့်ဆင့် စာရင်းများအတွင်း အရာဝတ္ထုများထုတ်ရန် recursion
Recursion များကို များသောအားဖြင့် အမျိုးမျိုးသော အဆင့်ဆင့် စာရင်းများကို လှန်လှောရန်အတွက် အသုံးပြုသည်။ ကျွန်ုပ်တို့တွင် အောက်ပါစာရင်းရှိသည်ဟု ဆိုကြပါစို့။
lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]
၎င်းကိုလှန်လှောမည့် function တစ်ခုကို ဖန်တီးကြပါစို့။
ပထမဦးစွာ အခြေခံအရာ (primitive)၊
တစ်နည်းအားဖြင့် စာရင်းမှ ရယူထားသောကိန်းတစ်ခုကို
console သို့ထုတ်ပြရန် သတ်မှတ်ချက်တစ်ခု သတ်မှတ်ရန်လိုအပ်သည်။
အကယ်၍ အရာဝတ္ထုသည် ရှုပ်ထွေးသည့် အရာဝတ္ထုဖြစ်ပါက၊
ဥပမာ၊ အဆင့်ဆင့်စာရင်းတစ်ခု ဖြစ်ပါက၊
ဤကိစ္စတွင် function သည် မိမိကိုယ်ကို ခေါ်ဆိုပါစေ၊
တစ်နည်းအားဖြင့် recursion ဖြစ်ပေါ်လာမည်။ အရာဝတ္ထု၏အမျိုးအစားကို စစ်ဆေးရန်
function isinstance ကို အသုံးပြုမည်။
ကျွန်ုပ်တို့၏ဥပမာအတွက်သာ ပထမ parameter
isinstance တွင် el ကိုရေးပြီး
ဒုတိယတွင် အမျိုးအစား list ကို ရေးမည်။
def func(lst):
for el in lst:
if isinstance(el, list):
func(el)
else:
print(el)
Function ခေါ်ဆိုသည့်အခါ အဆင့်ဆင့် စာရင်းမှ ကိန်းအားလုံးကို တစ်ခုပြီးတစ်ခု ထုတ်ပြမည်။
func(lst) # 1, 2, ... 8, 9 ကို ထုတ်ပြမည်။
ဥပမာ . အဆင့်ဆင့် စာရင်းများအတွင်း အရာဝတ္ထုများဖြင့် လုပ်ဆောင်ချက်များအတွက် recursion
Recursion များကို အဆင့်ဆင့် စာရင်းများအတွင်း အရာဝတ္ထုများဖြင့် လုပ်ဆောင်ချက်အမျိုးမျိုးအတွက်လည်း အသုံးပြုနိုင်သည်။ ကျွန်ုပ်တို့တွင် အောက်ပါစာရင်းရှိသည်ဟု ဆိုကြပါစို့။
lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]
၎င်း၏ အရာဝတ္ထုအားလုံး၏ ပေါင်းလဒ်ကို ရယူကြပါစို့။
ဤအတွက် function အတွင်း variable res ကို ကြေညာမည်၊
ထဲတွင် ကိန်းများ၏ပေါင်းလဒ်ကို စုဆောင်းမည်။
သတ်မှတ်ချက်တွင် အကယ်၍ အရာဝတ္ထုသည်
ရှုပ်ထွေးသည့် အရာဝတ္ထုဖြစ်ပါက၊ ၎င်းသည်
function func ၏ parameter ထဲသို့ဝင်ရောက်ပြီး
ပေါင်းလဒ်ထဲသို့ ထည့်ပေါင်းမည်ဟု ရေးသားမည်။
ဆိုလိုသည်မှာ အရာဝတ္ထုသည်
recursion ထဲတွင် ရှိနေမည်ဖြစ်ပြီး မူလအခြေခံအရာ (primitive) မဖြစ်မချင်း ရှိနေမည်။
ထို့နောက်သာ ၎င်းသည်
res တွင်ရေးထားသော ပေါင်းလဒ်ထဲသို့ ထည့်ပေါင်းမည်။
def func(lst):
res = 0
for el in lst:
if isinstance(el, list):
res += func(el)
else:
res += el
return res
Function ကိုခေါ်ပြီး ၎င်း၏ ရလဒ်ကို console သို့ ထုတ်ကြည့်ကြပါစို့။
print(func(lst)) # 45 ကိုထုတ်ပြမည်။
ဥပမာ . စာရင်းတစ်ခုထဲသို့ စုဆောင်းရန် recursion
Recursion ကိုသုံး၍ အဆင့်ဆင့် စာရင်းများကို တစ်ခုတည်းသော တစ်ဖက်မှန်စာရင်းတစ်ခုထဲသို့ ဖြန့်ထုတ်နိုင်သည်။ ကျွန်ုပ်တို့တွင် အောက်ပါစာရင်းရှိသည်ဟု ဆိုကြပါစို့။
lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]
Function အတွင်း ဗလာစာရင်း
res ကို ရေးမည်၊ ထဲတွင် မူရင်းစာရင်း၏
အရာဝတ္ထုများကို စုဆောင်းမည်။ ထို့နောက်
loop ကိုစတင်ပြီး သတ်မှတ်ချက်တစ်ခု သတ်မှတ်မည် - အကယ်၍ အရာဝတ္ထုသည်
စာရင်းဖြစ်ပါက၊ ၎င်းသည် method
extend ထဲသို့ဝင်ရောက်မည်။
ဤ method သည်
ဒုတိယစာရင်း၏အဆုံးသို့ ပထမစာရင်း၏အရာဝတ္ထုများကို ချိတ်ဆက်ပေးသည်၊
တစ်နည်းအားဖြင့် အဆင့်ဆင့်စာရင်း၏အရာဝတ္ထုများသည်
စာရင်း res ၏အဆုံးသို့ ရောက်ရှိလာမည်။
def func(lst):
res = []
for el in lst:
if isinstance(el, list):
res.extend(func(el))
else:
res.append(el)
return res
print(func(lst))
ပြီးစီးသောကုဒ်၏ ရလဒ်။
[1, 2, 3, 4, 5, 6, 7, 8, 9]
လက်တွေ့လေ့ကျင့်ခန်းများ
အဆင့်ဆင့်နက်ရှိုင်းသော dictionary တစ်ခု၏ ကိန်းဂဏန်းအရာဝတ္ထုအားလုံးကို ထုတ်ပြပါ။
{
'a': {
'b': 1,
'c': 2,
'd': {
'e': 3,
'f': 4
}
},
'j': {
'h': 5,
'k': 6,
},
'l': 7
}
ယခင်လေ့ကျင့်ခန်း၏ dictionary ၏ အရာဝတ္ထုများ၏ ပေါင်းလဒ်ကို ရှာပါ။
ယခင်လေ့ကျင့်ခန်း၏ dictionary ၏ အခြေခံအရာဝတ္ထုများ၏ စာရင်းကို ရယူပါ။