- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我偶然发现了这个解决方案,但我无法理解其中到底发生了什么。谁能解释一下!
据我了解,它试图通过计算一半的单元格然后将其加倍来计算 a*b 网格中的单元格数量。但是我无法理解递归调用。
请不要建议其他解决方案,请尝试解释此解决方案:)
def minProduct(a,b):
bigger = b if a < b else a #a < b ? b : a
smaller = a if a < b else b #a < b ? a : b
return minProductHelper(smaller,bigger)
def minProductHelper(smaller, bigger):
if smaller == 0:
return 0
elif smaller == 1:
return bigger
# Compute half. If uneven, compute other half. If even, double it
s = smaller >> 1 # divide by 2
side1 = minProduct(s,bigger)
side2 = side1
if smaller % 2 == 1:
side2 = minProductHelper(smaller - s, bigger)
return side1 + side2
print(minProduct(5,6))
1 Câu trả lời
从某种意义上说,这是一种递归的分而治之算法。向左移 1
有效地将数字除以 2
(丢弃任何余数)。 minProductHelper
sử dụng s = smaller >> 1
Sẽ smaller
除以 2
,然后返回 的递归求和>s * bigger
Và (smaller - s) * bigger
。由于加法和乘法的特性,您可以得到 ((smaller - s) * bigger) + (s * bigger) == smaller * bigger
这就是您想要的结果。您有两种基本情况,当 smaller
vì 0
hoặc 1
时,您可以想象调用 minProduct(a ,b)
将继续将 Một
hoặc b
切成两半(然后将这些一半分成两半,等等)直到它所要做的就是对一堆求和涉及 0
和一些数字或 1
和一些数字的产品,无需使用 *
运算符即可确定。较小的数字总是被减半而不是较大的数字,因为这允许用较少的递归调用达到基本情况。
关于python - 如何在不使用 * 运算符(或/运算符)的情况下递归地将两个正整数相乘? .您可以使用加法、减法和位移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839547/
Toán tử Or thực hiện phép toán logic OR trên hai biểu thức. result = expression1 Hoặc expression2 Tham số result Bất kỳ biến số nào. biểu thức1 Bất kỳ
Toán tử Not thực hiện phép toán logic NOT trên một biểu thức. result = Không phải biểu thức Tham số result Bất kỳ biến số nào. biểu thức Bất kỳ biểu thức nào. Bảng sau đây cho thấy cách
Toán tử Is so sánh hai biến tham chiếu đối tượng. result = object1 Là object2 Tham số result Bất kỳ biến số nào. object1 Bất kỳ tên đối tượng nào. object2 Bất kỳ
Toán tử \ chia hai số và trả về kết quả dưới dạng số nguyên. result = number1\number2 Tham số result Bất kỳ biến số nào. number1 Bất kỳ biểu thức số nào. số
Toán tử And thực hiện phép toán logic AND trên hai biểu thức. result = expression1 Và expression2 Tham số result Bất kỳ biến số nào. biểu thức1
Toán tử + tính tổng của hai số. result = expression1 + expression2 Tham số result Bất kỳ biến số nào. expression1 Bất kỳ biểu thức nào. kinh nghiệm
Tôi thấy khó hiểu với đoạn mã này: var n1 = 5-"4"; var n2 = 5+"4"; alert(n1); alert(n2); Tôi biết n1 là 1. Đó là bởi vì toán tử trừ biến chuỗi "4" thành
Tôi nghĩ tôi sẽ đạt được 12 điểm, không phải 7 điểm. w++, khi đó w sẽ bằng 4, tức là 100, và w++, w sẽ bằng 8, tức là 1000; do đó w++|z++ sẽ bằng 100|1000 = 1100 sẽ bằng 12. Tôi bị sao thế này? số nguyên
Toán tử Xor thực hiện phép toán logic "OR loại trừ" trên hai biểu thức. result = expression1 Xor expression2 Tham số result Bất kỳ biến số nào. biểu thức1
Toán tử Mod chia hai số và trả về số dư. result = number1 Mod number2 Tham số result Bất kỳ biến số nào. number1 Bất kỳ biểu thức số nào. số
Toán tử Imp thực hiện hàm ý logic trên hai biểu thức. result = expression1 Imp expression2 Tham số result Bất kỳ biến số nào. biểu thức1
Toán tử Eqv thực hiện tính tương đương logic của hai biểu thức. result = expression1 Tương đương expression2 Tham số result Bất kỳ biến số nào. biểu thức1
Tôi có một lớp vectơ toán học đơn giản với phép toán quá tải. Tôi muốn có một số kết quả về thời gian cho người điều hành của tôi. Tôi có thể dễ dàng tính thời gian cho +=, -=, *= và /= của mình bằng cách tính thời gian cho đoạn mã sau: Vector sum; for(s
Tôi mới làm quen với toán tử so sánh do người dùng định nghĩa. Tôi đang đọc một cuốn sách có đề cập đến ví dụ sau: struct P { int x, y; bool operator, operator<>
Trên trang Wikipedia về SQL, có một số bảng chân trị cho logic bool trong SQL. [1] Trang Wikipedia dường như được lấy từ tiêu chuẩn SQL:2003. Bảng chân lý cho toán tử bằng (=) giống với I trong bản thảo SQL:2003.
Tôi tình cờ gặp một toán tử C++ kỳ lạ. http://www.terralib.org/html/v410/classoracle_1_1occi_1_1_number.html#a0f2780081f
Tôi đã đọc về một câu hỏi trong SO và trong các câu trả lời có đề cập như sau: Nếu không tìm thấy hàm giải phóng khớp rõ ràng nào, pr
Tôi tình cờ tìm thấy giải pháp này nhưng tôi không hiểu chính xác điều gì đang diễn ra trong đó. Có ai giải thích được không! Theo tôi hiểu thì nó cố gắng tính số ô trong lưới a*b bằng cách đếm một nửa số ô rồi nhân đôi chúng. Nhưng tôi không hiểu được lệnh gọi đệ quy. Xin vui lòng không đề xuất các giải pháp khác
Kiểu cơ bản của Go Kiểu Boolean bool Độ dài: 1 byte Giá trị: Các giá trị kiểu Boolean chỉ có thể là true hoặc false và không thể biểu diễn bằng số Số nguyên Kiểu số nguyên phổ quát int / uint (có dấu / không dấu, tương tự bên dưới) Độ dài: Theo phép toán
Trong hướng dẫn này, bạn sẽ tìm hiểu về các toán tử khác nhau có trong JavaScript và cách sử dụng chúng thông qua các ví dụ. Toán tử là gì? Trong JavaScript, toán tử là các ký hiệu đặc biệt được sử dụng để thực hiện các phép toán trên toán hạng (giá trị và biến). Ví dụ,
Tôi là một lập trình viên xuất sắc, rất giỏi!