免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2127 | 回复: 17
打印 上一主题 下一主题

向大家请教一个计算循环次数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-18 18:55 |只看该作者 |倒序浏览
这是专业课笔试中的一道填空题:


  1. fun(int n, int *s){
  2.         int f1, f2;
  3.         if( n==1 || n==2 )
  4.                 *s=1;
  5.         else{
  6.                 fun( n-1, &f1 );
  7.                 fun( n-2, &f2 );
  8.                 *s=f1+f2;
  9.         }
  10. }

  11. main(){
  12.         int x;
  13.         fun( 6 , &x );
  14.         printf("%d\n",x);
  15. }
复制代码


问程序的输出是多少。

在纸上模拟递归是可以做出来的,不过对于一个填空来说花费的时间太多了,有没有什么简便的方法来计算呢?


还有一个问题,

  1. void sum(int n, int &s){
  2.         int i,j,k;
  3.         s=0;
  4.         for(i=1;i<=n;i++)
  5.                 for(i=1;i<=j;j++)
  6.                         for(k=1;k<=j;k++)
  7.                                 s=s+i*j*k;
  8.        
  9. }
复制代码

问,对s赋值了多少次,也是一个填空题。有什么好办法么?
数列求和是可以求的,问题也是时间花费太多。

论坛徽章:
0
2 [报告]
发表于 2007-01-18 19:05 |只看该作者
====

对于题目 1:实质是从数列的递推公式求它的同项公式。如从 “A_(n) = A_(n-1) * 2 且 A_1 = 2” 求得 “A_(n) = 2^n”,这样等于是把函数简化了。

====

论坛徽章:
0
3 [报告]
发表于 2007-01-18 19:23 |只看该作者
这样啊,我回去研究研究

论坛徽章:
0
4 [报告]
发表于 2007-01-18 19:25 |只看该作者
====

万分抱歉,“通项”,不是 “同项”



====

论坛徽章:
0
5 [报告]
发表于 2007-01-18 19:28 |只看该作者
第一题不就Fibonacci数列嘛.........................................
第二题就高数极数吧...

论坛徽章:
0
6 [报告]
发表于 2007-01-18 19:28 |只看该作者
第一个:
f(1) = f(2) = 1;
f(n) = f(n-1) + f(n-2);
知道这是什么了吧

论坛徽章:
0
7 [报告]
发表于 2007-01-18 19:30 |只看该作者
====

不错。学习编程的时候,有点数学基础会受益无穷。

====

论坛徽章:
0
8 [报告]
发表于 2007-01-18 19:32 |只看该作者
第二个代码错了,应该是这样吧:

  1. void sum(int n, int &s){
  2.         int i,j,k;
  3.         s=0;
  4.         for(i=1;i<=n;i++)
  5.                 for(j=1;j<=i;j++)
  6.                         for(k=1;k<=j;k++)
  7.                                 s=s+i*j*k;
  8.         
  9. }

复制代码


让你计算复杂度

论坛徽章:
0
9 [报告]
发表于 2007-01-18 19:36 |只看该作者
第二题就这个解, 比高数极数容易多了...嘿嘿不用判敛...

  1. 1 + (1/2) * (n*(n+1)*(2n+1)/6 + n*(n+1)/2)
复制代码

[ 本帖最后由 Edengundam 于 2007-1-18 19:38 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-01-18 19:40 |只看该作者
原帖由 Edengundam 于 2007-1-18 19:36 发表
第二题就这个解, 比高数极数容易多了...嘿嘿不用判敛...

  1. 1 + (1/2) * (n*(n+1)*(2n+1)/6 + n*(n+1)/2)
复制代码

其实这样写更清晰,又不是做数学题,呵呵

aaa.JPG (7.44 KB, 下载次数: 20)

aaa.JPG
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP