Baiklah, mari kita lihat fungsi yang sangat sederhana.
def super_simple_function():
return 0
Apa yang terjadi jika saya melakukan x = super_simple_function()
?
>>> x = super_simple_function()
>>> x
0
Itu karena nilai return fungsinya adalah nol. Jadi ada objek fungsi, yang memberi Anda (mengembalikan) nilai saat dipanggil.
Mari kita lihat fungsi rekursif Anda, baris demi baris. Bayangkan kita memasukkan 2 dan 3 sebagai argumen kita, seperti: slowAdd(2, 3)
.
Baris 1: def slowAdd(m, n)
Artinya argumen pertama sama dengan m
dan kedua, n
. Oleh karena itu, dalam kasus kami, m = 2
dan n = 3
.
Baris 2: if n == 0
Ini adalah kondisi yang terpicu ketika n equals to 0
. Nah, sekarang n = 3
jadi kondisi ini diabaikan.
Baris 3: return m
Karena n
tidak sama dengan 0, baris ini diabaikan untuk saat ini; kami akan kembali ke sana.
Baris 4 & 5: else: return 1 + slowAdd(m, n-1)
Ada tiga hal yang terjadi di sini.
- Kami menerima nilai pengembalian
slowAdd(m, n-1)
.
- Kami menambahkan 1 ke nilai kembalian
- Kami mengembalikan jumlah dari #2.
Fungsi ini disebut rekursif karena #1. Seperti yang dapat Anda bayangkan, fungsi ini akan terus memanggil dirinya sendiri hingga n == 0
, yang kemudian mengembalikan m
, bukan 1 + slowAdd(m, n-1)
. Dan karena kita mengurangi n
sebanyak 1 di setiap rekursi, kita tahu pasti bahwa n
pada akhirnya akan sama dengan 0.
Jadi pada dasarnya inilah yang dilakukan fungsi ketika kita meneruskan (2, 3)
sebagai argumen:
1st recursion: return 1 + slowAdd(2, 2)
2nd recursion: return 1 + slowAdd(2, 1)
3rd recursion: return 1 + slowAdd(2,0)
4th recursion: return 2 # n is finally 0!
Yang berjumlah 2 + 1 + 1 + 1 = 5
.
person
spicypumpkin
schedule
30.01.2017
slowAdd(m, n-1)
. Jadi, jika Anda punyadef f(n): return 8 - n
dan melakukan1 + f(1)
Anda akan mendapat 8. - person juanpa.arrivillaga   schedule 31.01.2017recursion with slowAdd()
seperti yang dia lakukan denganfor
atauwhile
loop. Dia menanggapi @Barmar, saya kira. - person spicypumpkin   schedule 31.01.2017