[英]How could I solve this recursion problem with C++
計算 C (n, k) 為:
C (n, 0) = C (n, n) = 1 if n >= 0
C (n, k) = C (n -1, k) + C (n - 1, k - 1) if n > k > 0
我真的不太明白,我知道這是一個遞歸函數,它作為參數n和k變量。
這是我想要的一些東西。
#include <iostream>
using namespace std;
int calc(int n, int k) {
if (n >= 0) {
return 1;
}
if (n > k > 0) {
return calc(n - 1, k) + calc(n - 1, k - 1);
}
return calc(n, k);
}
int main() {
int n, k;
cout << "Give a number for n: ";
cin >> n;
cout << "Give a number for k: ";
cin >> k;
cout << calc(n, k);
return 0;
}
函數中的第一個 if 語句
if (n >= 0) {
return 1;
}
已經是錯誤的,因為在賦值中描述的 if 語句中沒有使用這樣的條件。
也是這個 if 語句中的條件
if (n > k > 0)
沒有意義。
看來您需要的是以下函數定義。
#include <iostream>
unsigned long long calc( unsigned int n, unsigned int k )
{
return k == 0 || not( k < n ) ? 1 : calc( n - 1, k ) + calc( n - 1, k - 1 );
}
int main()
{
const unsigned int N = 10;
for ( unsigned int k = 1; k < N; k++ )
{
std::cout << calc( N, k ) << '\n';
}
}
程序輸出是
10
45
120
210
252
210
120
45
10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.