尝试计算C中有序排列和无序排列的数字和选择。 递归因子函数正在工作,置换结果给出随机存储器位置
./置换
输入项目数:5
输入要选择的数字:2
有1.#INF00有序排列
有## INF00无序排列
#include <stdio.h>
double ordered_permutation(double total_items, double selection);
double unordered_permutation(double total_items, double selection);
double factorial( double number);
int main() {
double items;
double selection;
printf("Enter number of items: ");
scanf("%f", &items);
printf("Enter number to select: ");
scanf("%f", &selection);
double ordered_perm;
double unordered_perm;
ordered_perm = ordered_permutation( items, selection );
unordered_perm = unordered_permutation( items , selection );
printf("There are %f ordered permutations\nThere are %f unordered permutations\n", ordered_perm, unordered_perm);
return 0;
}
/* total_items!/ ( total_items! - selection! ) */
double ordered_permutation(double total_items, double selection){
double permutations;
permutations = factorial(total_items)/ ( factorial(total_items) - factorial(selection) );
return permutations;
}
/* total_items!/ ( ( total_items! - selection! ) selection! ) */
double unordered_permutation(double total_items, double selection){
double permutations;
permutations = factorial(total_items)/ ( ( factorial(total_items) - factorial(selection) ) * factorial(selection));
return permutations;
}
double factorial( double number){
if( number <= 1 )
return 1;
else
return number * factorial((number-1));
}
答案 0 :(得分:0)
将分母调用更改为:
factorial(total_items - selection)
和
(factorial(total_items- selection) * factorial(selection))
答案 1 :(得分:0)
这不是你的问题的答案,但使用递归计算大阶乘可能导致堆栈溢出[并且相对]慢。
此外,您正在使用#if 1
typedef int value_t;
#else
typedef long long value_t;
#endif
value_t
factorial(value_t n)
{
value_t i;
value_t f;
f = 1;
for (i = 1; i <= n; ++i)
f *= i;
return f;
}
来处理计数和索引。因子是基于乘以整数,结果只能是整数。
这是一个非递归因子函数:
tableA.code.Split('-').FirstOrDefault() equals tableB.SiteCode