#53381: python範例(遞迴和迴圈2種範例)


liyoung74788@gmail.com (吳利揚)

學校 : 不指定學校
編號 : 318383
來源 : [114.42.67.127]
最後登入時間 :
2025-09-11 23:19:14

首先呢,雖然可以使用遞迴,但由於遞迴次數限制,無法AC,只有50%(我試過),先附上程式碼參考:

from collections import defaultdict
num = int(input())
friend = defaultdict(list)
a = list(map(int,input().split()))
for i in range(num):
    friend[i] = a[i]
visited = set()
def findfriend(i):
    if i not in visited:
        visited.add(i)
        findfriend(friend[i])
    else:
        return
sum = 0
for i in a:
    if i in visited:
        continue
    findfriend(i)
    sum += 1
print(sum)

再來就是比較簡單的迴圈(C用來記數,V用來存是否訪問過(訪問過為1,未訪問為0)),這個就可以成功過關了!

n=int(input())
a=list(map(int,input().split()))
v=[0]*n
c=0
for i in range(n):
    if not v[i]:
        cur=i
        while not v[cur]:
            v[cur]=1
            cur=a[cur]
        c+=1
print(c)

#53389: Re: python範例(遞迴和迴圈2種範例)


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

遞迴版參考: gist

但沒有比較好寫就是了