Horner规则的递归实现

    一个数据结构题目的小程序,递归实现。Horner规则

这是我关于递归的首次尝试。

#include 

/*Horner规则使多项式求值所需乘法次数最少
 *   对 A(x) = a[n]x^n + a[n-1]x^(n-1) + ... + a[1]x^1 + a[0]x^0
 *     有A(x) = (...((a[n]x + a[n-1])x + ... + a[1])x + a[0])
 *
 *   这是个递归实现:
 *     coeffi_array: 系数数组首地址;
 *     max_index: 系数数组的最后一项的索引(上式中的 n );
 *     x: 呵呵,未知数呗. 用具体的数带入
 *   
 *   Note: 规定在多项式的常数项中(a[0]), 有 0^0 = 1.
 * */
int horner_recursive(int *coeffi_array, int max_index, int x)
{
    if ( !max_index )
    {
        return *coeffi_array;
    }
    return horner_recursive(coeffi_array + 1, max_index - 1, x) * x + *coeffi_array;
}

//Application start.
int main(void)
{
    int result = 0, 
        i = 0, 
        x = 0, 
        amount = 0;
    do
    {
        printf("Input the amount of coefficients(include zero.):");
        scanf("%d", &amount);
    } while (amount <= 0);

    int a[amount];
    printf("Input the cofficients(Like:x,y,z  or  x y z):");
    for (i = 0; i < amount; ++i)
    {
        scanf("%d", &a[i]);
    }

    printf("Input the x:");
    scanf("%d", &x);

    result = horner_recursive(a, amount - 1, x);
    printf("The result is :%d", result);

    getch();
    return 0;
}


 

你可能感兴趣的:(C,小小练习)