/**/
/*
标题:<<系统设计师>>应试编程实例-[递推算法程序设计]
作者:成晓旭
时间:2002年09月11日(11:52:00-16:26:00)
实现递推算法的大整数阶乖处理函数
时间:2002年09月16日(18:38:00-20:02:00)
实现“斐波那契数列”问题的递推算法函数
*/
#include
"
stdio.h
"
#include
"
stdlib.h
"

//
:============================“大整数阶乖”问题的递推算法===========================
#define
MAXN1000
//
最大数据位数
//
用递推法求取整数k的阶乖,将结果放入数组array中
void
pnext(
int
array[],
int
k)
...
{
int*temp;//动态数组[临时存储运算大整数]
inti,j,num_len=array[0],carry,t;//循环变量,长整数位数,进位标志,临时变量
if(array[0]>=MAXN)
...{
printf("数据处理位数超过程序设计上限,程序将自动中断运行! ");
exit(1);
}
temp=(int*)malloc(sizeof(int)*(num_len+1));//创建动态数组
for(i=1;i<=num_len;i++)
temp[i]=array[i];//保存原始数据
for(j=1;j<k;j++)
...{
for(carry=0,i=1;i<=num_len;i++)
...{
if(i<=array[0])
t=array[i]+temp[i]+carry;
else
t=array[i]+carry;//处理最高位
//数据位调整
array[i]=t%10;
carry=t/10;
}
if(carry)
array[++num_len]=carry;//在最高位记录进位标志
}
free(temp);
array[0]=num_len;
}
//
显示阶乖结果
void
Show_Result(
int
array[],
int
base_number)
...
{
inti;
printf("%4d!=",base_number);
for(i=array[0];i>0;i--)
printf("%d",array[i]);
printf(" ");
}
//
计算数据的阶乖
void
Count_Result(
int
array[],
int
base_number)
...
{
intk;
array[0]=1;
array[1]=1;
for(k=2;k<=base_number;k++)
...{
pnext(array,k);
Show_Result(array,k);
}
}
//
:============================“大整数阶乖”问题的递推算法===========================
//
:============================“斐波那契数列”问题的递推算法===========================

/**/
/*
问题描述:
标准斐波那契数列:
F(0)=0,F(1)=1,Fn)=F(n-2)+F(n-1)(当n>1时)
广义斐波那契数列:
F(0)=0,F(1)=0,F(2)=1,Fn)=F(n-3)+F(n-2)+F(n-1)(当n>2时)
*/
//
标准斐波那契数列的递推算法函数
int
Std_Fibonacci(
int
number)
...
{
intf0=0,f1=1,result,loop;//初始值1,2,返回结果,循环计数器
if(number==0)return(0);
if(number==1)return(1);
for(loop=2;loop<=number;loop++)
...{
result=f0+f1;//由前两步的结果计算当前结果--->“推出”
f0=f1;//把原来的前一步当作下一次的前两步--->“传递”
f1=result;//把当前结果当作下一次的前一步--->“传递”
}//注意:在进行这种向前传递的操作时,特别小心传递的时序
return(result);
}
//
广义斐波那契数列的递推算法函数
int
Ext_Fibonacci(
int
number)
...
{
intf0=0,f1=0,f2=1,result,loop;//初始值1,2,3,返回结果,循环计数器
if(number==0||number==1)return(0);
if(number==2)return(1);
for(loop=2;loop<=number;loop++)
...{
result=f0+f1+f2;//由前三步的结果计算当前结果
f0=f1;
f1=f2;
f2=result;
}//注意:在进行这种向前传递的操作时,特别小心传递的时序[即:变量间赋值的前后关系及先后顺序]
return(result);
}
void
Run_Fibonacci()
...
{
intlarge,result;
while(large!=9910)
...{
printf(" 请输入斐波那契数列的元素个数[Enter'9910'toExit]: ");
scanf("%d",&large);
if(large!=9910)
...{
//result=Std_Fibonacci(large);
result=Ext_Fibonacci(large-1);
printf("斐波那契数据中的第[%d]= %d ",large,result);
}
}
}
//
:============================“斐波那契数列”问题的递推算法===========================
int
main(
int
argc,
char
*
argv[])
...
{
/**//*
intLargeArray[MAXN],large=0;
while(large!=9910)
{
printf("请输入需要求取其阶乖的整数[Enter'9910'toExit]: ");
scanf("%d",&large);
if(large!=9910)
Count_Result(LargeArray,large);
}
*/
Run_Fibonacci();
printf(" 应用程序运行结束! ");
return0;
}

本文介绍了一种使用递推算法处理大整数阶乘的方法,并提供了详细的C语言实现代码。此外,还探讨了标准和广义斐波那契数列的递推算法实现。

292

被折叠的 条评论
为什么被折叠?



