-
1 # 水晶棧說科技
-
2 # 愛坤小仙女湖
#include <iostream>
#include <future>
long long foo(int a, int b, std::future<long long> last = std::async(std::integral_constant<long long, 1>())) {
return a == b ? a * last.get() : foo((a + b) / 2 + 1, b, std::async(foo, a, (a + b) / 2, std::move(last)));
}
int main() {
std::cout << foo(1, 20) << std::endl;
}
-
3 # 農民小羅羅
既然提到優雅了,那麼我就給出一點思路吧。
應該從資料結構的角度去想這個問題。
ps:看到這個問題,我有點想哭。這個問題正是我大學時候課堂上被老師現場要求程式設計的問題。當時我用的最簡單for迴圈,完了一直結果為0另我當場出醜,後來下課了才發現初始化的問題。一氣之下我寫了三種方法,發郵件給老師了。
-
4 # 帶娃學程式設計
#include <iostream>
using namespace std;
long long mul(int i,int j);
int main()
{
cout<<mul(1,20)<<endl;
return 0;
}
long long mul(int i,int j){
if(j==i)
return i;
else
return j*mul(i,j-1);
}
-
5 # 碼中尋樂
題主的問題從數學角度來看,就是一個求階乘的小演算法,直接使用遞迴方式來實現,簡潔又易於理解。 函式實現如下:
上圖的函式實現了階乘n!,就是n*(n-1)*(n-2)*...*1,函式呼叫如下:
輸出結果為v4:24 v5:120 v6:720 v7:5040 v10:3628800 v20:2432902008176640000
回覆列表
#include <cstdlib>
int main()
{
std::system("emacs –Q --batch --execute \"(progn "calc-comb)"
"(message (math-format-bignum-decimal"
"(cdr (cadr (math-factorial-iter 1 20 (lambda ())))))))\"");
return 0;
}