https://rosettacode.org/wiki/Fibonacci_sequence#Elixir
thực ra thì nếu các bạn học quy hoạch động các kiểu rồi sẽ không bao giờ còn thắc mắc cái (2), thêm nữa thường FP nó có hỗ trợ tail cail optimization, chỉ cần bạn viết function hợp lý nó sẽ biến cái recursion thành loop. Đấy là tôi còn chưa nói vì FP phần lớn là immutable cho nên compiler có nhiều cách optimize hiệu quả hơn, mấy cái trivial example dạng này nó replace function call thành constant hết.
tất nhiên constant folding thì cái nontrivial compiler nào cũng làm, bàn về optimization thì mấy thằng ít tài nguyên như haskell các kiểu còn lâu mới so được c/c++ có mấy cái compiler như gcc hay clang đã được đầu tư vài triệu giờ phát triển vào.
btw, về chuyện tại sao mấy thằng dùng FP lại cocky hơn mấy thằng dùng OOP, thì ngay cả câu thắc mắc này đã làm tôi coi thường các bạn rồi. Bởi vì thực ra nó đơn giản vãi ra: thằng đíu nào dùng FP cũng đã từng dùng OOP, thấy không thoả mãn với công cụ mình dùng mới chuyển sang dùng các công cụ khác nó thấy hợp hơn. Ngược lại thì mấy thằng khen OOP phần lớn là được học sẵn OOP ở trường, ra ngoài đời làm code monkey mấy chục năm đéo phát triển, đéo tự học được cái gì, nếu có học thì cũng là do công ty ép học, hoặc là vì miếng ăn.
Tất nhiên bỏ miếng ăn vào mồm được là không sai, thâm niên OOP đúng là lương cao hơn mấy thằng chơi FP nhiều, cơ mà đến rosettacode các kiểu cũng đéo biết thì xin phép cho tôi khinh bỉ các bạn tiếp.