/**//* 标题:<<系统设计师>>应试编程实例-[递推算法程序设计] 作者:成晓旭 时间: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 MAXN 1000 //最大数据位数//用递推法求取整数k的阶乖,将结果放入数组array中void pnext(int array[],int k)...{ int *temp; //动态数组[临时存储运算大整数] int i,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)...{ int i; printf("%4d!=",base_number); for(i=array[0];i>0;i--) printf("%d",array[i]); printf(" ");}//计算数据的阶乖void Count_Result(int array[], int base_number)...{ int k; 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)...{ int f0 = 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)...{ int f0 = 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()...{ int large,result; while(large!=9910) ...{ printf(" 请输入斐波那契数列的元素个数[Enter '9910' to Exit]: "); 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[])...{/**//* int LargeArray[MAXN],large = 0; while(large!=9910) { printf("请输入需要求取其阶乖的整数[Enter '9910' to Exit]: "); scanf("%d",&large); if(large!=9910) Count_Result(LargeArray,large); }*/ Run_Fibonacci(); printf(" 应用程序运行结束! "); return 0;}