工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1250|回复: 1

O(?)数据结构课习题

[复制链接]
发表于 2007-3-10 14:44 | 显示全部楼层 |阅读模式
题目:
k阶裴波那契序列的定义为:
   f(0)=0,f(1)=0,f(2)=0.....f(k-2)=0,f(k-1)=1      
   f(n)=f(n-1)+f(n-2)+.........+f(n-k)                 n=k,k+1,k+2....

编程实现K阶序列的第M个值,k,m 由用户输入



  1. #include <stdio.h>
  2. long func1(int m,int k);
  3. long func2(int ,int);
  4. int main(){
  5. int m,k;
  6. printf("请输入m(所求项数)和k(阶数)值\n输入0结束\n");
  7. while(scanf("%d %d",&m,&k),k!=0 && m!=0){
  8.   printf("无递归 Result=%ld\n",func2(m,k));
  9.   printf("递归   Result=%ld\n",func1(m,k));
  10.   printf("请输入m(所求项数)和k(阶数)值\n输入0结束\n");
  11. }
  12. return 0;
  13. }
  14. long func1(int m,int k){
  15. /**
  16. *  递归算法,极糟的算法... 输入 30 3 要等约一秒时间
  17. */
  18.   long result=0;
  19.   int tmp=k;
  20.   //printf("in func m=%d\n",m);
  21. if(m<k-1)return 0;
  22. if(m==k-1)return 1;
  23. if(m>k-1){
  24.   while(tmp-- /*&& m--*/)
  25.    result+=func1(m-k+tmp,k);
  26.   return result;
  27. }
  28. }
  29. long func2(int m,int k){
  30. /**
  31.   非递归算法
  32. */
  33. long tmpResult=1;
  34. long result=1;
  35. int tmpk=k;
  36. int tmpm=0;
  37. int curPos=k;
  38. long *tmpResults;
  39. if(m<k-1)return 0;
  40. if(m==k-1)return 1;

  41. //初始化表
  42. //略
  43. //初始化结束
  44.   
  45. do{
  46.   tmpk=k;
  47.   result=0;
  48.   while(tmpk--)
  49.    result+=*(tmpResults+tmpk);
  50.    //调整末尾位置   
  51.    //略
  52.    //调整结束
  53.    //末尾位置赋值为当前值
  54.    //略
  55.    //赋值结束
  56. }while(tmpm++<m);
  57. free(tmpResults);
  58. return result;
  59. }
复制代码


想知道递归算法的时间复杂度...

[ 本帖最后由 onttpi 于 2007-3-10 14:52 编辑 ]

评分

1

查看全部评分

发表于 2007-3-13 01:04 | 显示全部楼层
看起来好复杂啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-5 05:14

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表