在我學校的計算機科學2課上,我們正在探索遞歸。我們已經使用遞歸來進行階乘或Fibonacci序列的處理,但是卡在is_prime(n)
函數中,如果n爲素數則返回True,否則返回False。我們之前曾經迭代地寫過一篇,但似乎無法弄清楚如何遞歸地做。這是我們到目前爲止:python 3.x中的遞歸is_prime函數
def is_prime(n):
if n < 2: return False
#1 or 0 is not prime, base case 1
if n == 2 or n == 3: return True
#2 and 3 are both prime, base case 2
if is_prime(n-1): return False
#This checks if n-1 is prime, b/c if so then n must not be prime
#However, this only works b/c the first few numbers have lots of primes
return True
#Only returns True if nothing else has returned
如果任何人可以幫助我們一點點,最好通過只是一些提示,這將是偉大的。謝謝!
那麼如果'n-1'是素數和'n> 3'那麼'n'是複合的。除了那種微不足道的觀察之外,知道'n-1'會發生什麼情況,告訴你很少有關於'n'的信息。沒有很好的方法來減少檢查'n'是否是檢查'n-1'是否爲素數的主要問題。 –
說實話,我不認爲這是遞歸的好選擇。迭代解決方案將更加簡單快捷。我意識到你在這件事上沒有選擇,但是,對我來說,這似乎是一個愚蠢的任務。 –
@TomKarzes我同意在Python(或大多數語言)中做這件事情沒什麼意義,但有像Lisp這樣的語言,其中大多數計算是遞歸地完成的。一門很好的計算機科學入門課程應該讓學生接觸到各種範例,因此作爲一種學習練習來弄清楚如何遞歸地做這樣的事情是有意義的。 –