1 def calc(n): 2 print(n) 3 if int(n/2) == 0: #递归出口 4 return n 5 res=calc(int(n / 2)) 6 return res 7 calc(10)
运行结果: 10 5 2 1
import time person_list=['alex','wangzi','kaixin','dashu'] def ask_way(person_list): print('_'*60) if len(person_list) == 0: return '没有人知道在哪' person=person_list.pop(0) if person == 'dashu': return '%s说:我知道,在中心街' %person print('hi,请问[%s],你知道www在哪吗?'%person ) print('%s 回答:不知道 但念在你态度诚恳 我去帮你问问%s...'%(person,person_list)) time.sleep(2) res=ask_way(person_list) #调用自己 print('%s问的结果是:%res'%(person,res)) return res res=ask_way(person_list) print(res)
运行结果: ____________________________________________________________ hi,请问[alex],你知道www在哪吗? alex 回答:不知道 但念在你态度诚恳 我去帮你问问['wangzi', 'kaixin', 'dashu']... ____________________________________________________________ hi,请问[wangzi],你知道www在哪吗? wangzi 回答:不知道 但念在你态度诚恳 我去帮你问问['kaixin', 'dashu']... ____________________________________________________________ hi,请问[kaixin],你知道www在哪吗? kaixin 回答:不知道 但念在你态度诚恳 我去帮你问问['dashu']... ____________________________________________________________ kaixin问的结果是:'dashu说:我知道,在中心街' wangzi问的结果是:'dashu说:我知道,在中心街' alex问的结果是:'dashu说:我知道,在中心街' dashu说:我知道,在中心街 Process finished with exit code 0
递归特性:
1:必须有明确的出口
2:每次进入更深一层递归 问题规模减小
3:递归效率不高 层次过多会导致栈溢出