Tôi thích lập trình chức năng trong Octave, nhưng nó khá khó sử dụng trong thực tế. Tôi đang tự hỏi về cách ngắn nhất để xác định một hàm đệ quy ẩn danh.
Tôi có một số ý tưởng, nhưng tôi tự hỏi liệu có cách nào để kết hợp những ý tưởng này để làm cho chúng thậm chí ngắn hơn (hoặc ngắn hơn nhưng linh hoạt hơn). Vì lợi ích của câu hỏi này, hãy tính toán đệ quy về 0 (chỉ để giữ cho trọng tải càng đơn giản càng tốt).
Nếu lý luận của tôi là chính xác, không có tên biến nào tôi sử dụng trong các ví dụ sau sẽ trùng nhau. Hàm mong muốn là q(n)
, luôn luôn trả về 0. i
được sử dụng như một biến đếmf
là hàm đệ quy mà tôi đã gọi g
trong phạm vi cục bộ của f
.
44 byte, "định nghĩa nội tuyến của f
"
q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)
44 byte, "định nghĩa danh sách đối số của f
"
q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)
44 byte, "định nghĩa riêng biệt của f
"
f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)
41 byte, "hàm mong muốn làm giá trị trả về"
f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)
'Người chiến thắng' hiện tại được lấy cảm hứng từ câu trả lời này bởi flawr . Tuy nhiên, với phạm vi rộng lớn của các cách khác nhau để làm điều này, có lẽ ai đó có thể nghĩ về một sự kết hợp thậm chí ngắn hơn các phương pháp.
Mục tiêu tất nhiên là để có được nó dưới 39 byte cho chức năng "đầy đủ", Hãy thử trực tuyến!