Làm thế nào tôi có thể tính tổng của tất cả các số nguyên dương nhỏ hơn n?


3

Tôi có chức năng sau:

f(n) = f(n - 1) + (n - 1)
f(0) = 0
n >= 0

Tôi đã nkhai báo trên cột A và cần kết quả của f(n)cột B.

Tôi đang cố gắng tìm công thức Excel tương đương cho hàm này.

Kết quả mẫu:

A | B
--+--
0 | 0

hoặc là:

A | B
--+--
1 | 0

hoặc là:

A | B
--+--
4 | 6

nhưng không bao giờ :

A | B
--+--
0 | 0
1 | 0
2 | 1
...

Vấn đề lớn nhất là, tôi không thể mô phỏng giá trị của f(n - 1). Vì vậy, tham chiếu hàng trước như ví dụ trên là không hợp lệ. Tôi gần như chắc chắn câu trả lời là tầm thường, tôi chỉ không thể tìm thấy nó.

Câu trả lời:


14

Không giúp đỡ à?

f(n) = sum of all positive integers less than n

Nó nên, đặc biệt là với sự giúp đỡ của một số số học .

OK, cho rằng mọi người hiện đang đăng câu trả lời với các chức năng do người dùng xác định , đây là câu trả lời

f(n) = (n-1)n/2

Cập nhật : Đối với những người không thể thấy rằng công thức không sử dụng bất kỳ thông tin nào từ bất kỳ hàng nào khác (xem nhận xét của Stan R. bên dưới), tôi đã xáo trộn đơn hàng một chút:

 0 = (A1-1) * A1 / 2 0
 9 = (A2-1) * A2 / 2 36
 2 = (A3-1) * A3 / 2 1
 4 = (A4-1) * A4 / 2 6
 6 = (A5-1) * A5 / 2 15
 5 = (A6-1) * A6 / 2 10
10 = (A7-1) * A7 / 2 45
 8 = (A8-1) * A8 / 2 28
 3 = (A9-1) * A9 / 2 3
 7 = (A10-1) * A10 / 2 21
 1 = (A11-1) * A11 / 2 0
...

có lẽ f chỉ là một chức năng cho một chức năng tiếp nhận phức tạp hơn
Scott Weinstein

@Scott Weinstein Câu hỏi là câu hỏi. Nếu tôi sẽ bị hạ thấp để trả lời câu hỏi như nó đã được đăng, thì hãy là nó.
Sinan ürnür

giả sử rằng cột A sẽ tuần tự thì ví dụ của bạn hoạt động.
Stan R.

Scott, câu hỏi không ngụ ý gì cả. Nếu câu hỏi có ý nghĩa, "Làm thế nào tôi có thể thực hiện một hàm đệ quy chung trong Excel?" hơn, tốt, đó là những gì câu hỏi nên nói. Phiên bản ít ỏi hơn của câu trả lời của Sinan (hoàn toàn chính xác) là: f (n + 1) = (n ^ 2 + n) / 2
WCWedin

điểm tốt, có lẽ ít giả định hơn về phía tôi ...
Scott Weinstein

7

Bạn có cần phải giải quyết nó một cách đệ quy? Đó chắc chắn không phải là cách tốt nhất để giải quyết nó:

Tính tổng các số từ 1 đến 10

   1 + 2 + 3 + 4 + 5
+ 10 + 9 + 8 + 7 + 6
  --  --  --  --  --
  11 +11 +11 +11 +11 = 55

hoặc, như đã tóm tắt, (n+1)(n/2)- với n = 10, điều này rõ ràng là11 x 5


1
Đừng! Quên về Gauss ...
Greg

Tôi nên chỉ ra rằng tôi thực sự đang giải quyết (n + 1) khi câu hỏi được đặt ra, nhưng biểu hiện bình thường của vấn đề này là tổng hợp thành một con số, bao gồm

3

Các chức năng có thể được phục hồi để loại bỏ đệ quy.

Hãy lấy một vài ví dụ ở đây ...

f(4)=1+2+3=6
f(5)=1+2+3+4=10
f(6)=1+2+3+4+5=15

Có một mô hình ở đây:

f(4)=1+2+3=6=4*1.5
f(5)=1+2+3+4=10=5*2
f(6)=1+2+3+4+5=15=6*2.5

có nghĩa là chúng ta có thể khái quát hàm f(n)=1+2+...+n=n*(n-1)/2cho n> 1 và mặt f(n)=0khác.

Công thức Excel kết quả sau đó có thể được viết là =IF(A5>1;A5*(A5-1)/2);0), giả sử A5 chứa n.

Rõ ràng, nếu công thức của bạn phức tạp hơn công thức bạn đưa ra, nó có thể trở nên khó hơn một chút, và có thể nhanh hơn và dễ dàng hơn khi chỉ viết một hàm do người dùng xác định như hàm do Scott đề xuất và sau đó sử dụng hàm đó.


2

Không chắc chắn làm thế nào để làm điều đó với các công thức tinh khiết. Một lựa chọn là UDF

Public Function f(n As Integer) As Integer
    If (n = 0) Then
        f = 0
        Exit Function
    End If

    If (n > 0) Then
        f = f(n - 1) + (n - 1)
    End If
End Function

và sau đó công thức chỉ là =f(A1)


đánh bại tôi với mã: P
Stan R.

2

Excel có một cái gì đó gọi là Công thức mảng, cho phép hàm trả về một tập hợp các giá trị. Bạn có thể đọc thêm về họ ở đây . Chúng sẽ cho phép bạn viết một cách hiệu quả, với một số sáng tạo, tương tự các thuật toán đệ quy. Các công thức mảng phải được nhập bằng cách sử dụng Shift-Ctrl-Enter .

Để trả lời câu hỏi của bạn, có một hàm mảng trả về 1 đến n-1 và gói nó thành một tổng. Ở đây, Indirect tạo một tham chiếu và A1 giữ n :

=SUM( ROW( INDIRECT("1:"&A1-1) ) )

0

nếu hiểu đúng về bạn thì bạn đang cố tạo một hàm đệ quy và các tham chiếu vòng tròn trong Excel không được phép. Đặt cược tốt nhất của bạn là tạo chức năng bảng tính của riêng bạn.

Nhấn Alt + F11 để vào VB sau đó Chèn> Mô-đun, sau đó làm theo câu trả lời của Scott .


0

Thông thường cách thức này được thực hiện là xác định các chức năng của riêng bạn. Trong trình chỉnh sửa VBA, chèn một mô-đun mới vào sổ làm việc của bạn và dán vào chức năng sau:

Function f(n As Integer)
    If n <= 0 Then
        f = 0
    Else
        f = f(n - 1) + (n - 1)
    End If
End Function

Bây giờ bạn có thể gọi điều này trực tiếp:

=f(A2)

0
=IF(MOD(A1,2)=0,(A1-1)*ROUND(A1/2,0), (A1) * ((A1-1)/2))

Tôi không biết, nếu đó là những gì bạn đang tìm kiếm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.