Tôi hiện đang cố gắng để quấn đầu của tôi xung quanh học Python và tôi đã đến một chút của một gian hàng về chức năng đệ quy. Trong Think Python, một trong những bài tập là viết một hàm xác định nếu số một là một sức mạnh của số b sử dụng định nghĩa sau đây:Tại sao hàm đệ quy của tôi trả về Không?
"Một số, một, là một sức mạnh của b nếu nó chia hết cho b và a/b là một lũy thừa của b. Viết một hàm gọi là is_power lấy tham số a và b và trả về True nếu a là một lũy thừa của b. "
Trạng thái hiện tại của chức năng của tôi là:
def isPower(a,b):
return a % b == 0 and (a/b) % b == 0
print isPower(num1,num2)
Vì nó là, điều này tạo ra kết quả tôi mong đợi. Tuy nhiên, chương này tập trung vào việc viết các hàm đệ quy để giảm sự dư thừa và tôi không hoàn toàn chắc chắn làm thế nào tôi có thể biến "cuối cùng (a/b)% b == 0" thành đệ quy. Tôi đã cố gắng:
def isPower(a,b):
if a % b != 0:
return False
elif isPower((a/b),b):
return True
Nhưng điều đó chỉ trả về Không.
Cách thích hợp để recurse chức năng này là gì?
bạn nên hãy cẩn thận rằng ý nghĩa của toán tử '/' đã thay đổi trong Python 3+, từ trả về một số nguyên để trả về một dấu phẩy, vì vậy mã của bạn sẽ bị ngắt. Thay đổi nó thành '//', nó sẽ luôn trả về một int. –
lưu ý rằng nỗ lực đầu tiên của bạn không kiểm tra xem a là một sức mạnh của b, nó cheks nếu a là bội số của b^2. thử isPower (12,2), nó sẽ trả về True. – Javier
Chỉ cần như vậy, phiên bản đầu tiên của isPower bị hỏng - nó sẽ chỉ cho biết 'a' là bội số của' b^2'. Nó sẽ trả về true cho 'isPower (2, 1)', ví dụ, điều này sẽ không bao giờ đúng. Cho rằng vấn đề, bạn có thể muốn chắc chắn bất kỳ kiểm tra phiên bản đệ quy cho dù '(b == 1 && một! = 1)' trước khi nó tiếp tục, hoặc nó sẽ hoặc gặp khó khăn trong một vòng lặp vô hạn hoặc trả lại điều sai. – cHao