Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 爱疯

[已解决]已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项.

[复制链接]
发表于 2013-8-29 09:30 | 显示全部楼层
一二个case可合成一个:case 1,2 或case is <3 等,同时后者还可弥补在调用时参数n小于1的错误
回复

使用道具 举报

 楼主| 发表于 2013-8-29 10:10 | 显示全部楼层
本帖最后由 爱疯 于 2013-8-29 11:19 编辑
上清宫主 发表于 2013-8-29 09:30
一二个case可合成一个:case 1,2 或case is


谢谢上清!

“... 在调用时参数n小于1的错误”,不知是指什么情况下呀?
回复

使用道具 举报

发表于 2013-8-29 12:10 | 显示全部楼层
爱疯 发表于 2013-8-29 10:10
谢谢上清!

“... 在调用时参数n小于1的错误”,不知是指什么情况下呀?

你试一下f(0)、f(-1)看会怎么样
回复

使用道具 举报

 楼主| 发表于 2013-8-29 15:20 | 显示全部楼层
上清宫主 发表于 2013-8-29 12:10
你试一下f(0)、f(-1)看会怎么样

If n > 3 Then MsgBox F(n)


如果主程序没判断,可利用“ case 条件”来确保。是这个意思么?

我把判断放在主程序,是想尽可能让F()专一些,这样更好些吧?
回复

使用道具 举报

发表于 2013-8-29 16:47 | 显示全部楼层
本帖最后由 香川群子 于 2013-8-29 16:49 编辑

从第4项起,f(n)=Σf(x) x=n-3 to n-1

即: f(n)=f(n-3)+f(n-2)+f(n-1)


数列的第1-3项起点,可以从 1,1,2…… 开始

也可以从 0,0,1……开始

回复

使用道具 举报

发表于 2013-8-29 17:05 | 显示全部楼层
爱疯 发表于 2013-8-29 09:16
谢谢sliang28!
以前没这么想过,见证奇迹了。。。。。循环也好理解噢!

递归更简单啊!

下面是0,0,1开始的数列:

  1. Function f(x)
  2.     If x > 3 Then
  3.         f = f(x - 1) + f(x - 2) + f(x - 3)
  4.     Else
  5.         If x = 3 Then f = 1 Else f = 0
  6.     End If
  7. End Function
复制代码
下面是1,1,2开始的数列:

  1. Function f(x)
  2.     If x > 3 Then
  3.         f = f(x - 1) + f(x - 2) + f(x - 3)
  4.     Else
  5.         If x = 3 Then f = 2 Else f = 1
  6.     End If
  7. End Function
复制代码
具体用法:
1. 复制递归函数粘贴到模块中
2. 在任意列中,从第1行开始写入=f(Row()) 下拉即可。

当然也可以直接写入 =f(10) 来计算返回数列中第10个数



评分

参与人数 1 +10 金币 +10 收起 理由
爱疯 + 10 + 10 谢谢群子老师!学习

查看全部评分

回复

使用道具 举报

发表于 2013-8-29 17:10 | 显示全部楼层
这种题目明显不应该尝试使用<1的参数啊
回复

使用道具 举报

发表于 2013-8-29 17:20 | 显示全部楼层    本楼为最佳答案   
爱疯 发表于 2013-8-29 09:16
谢谢sliang28!
以前没这么想过,见证奇迹了。。。。。循环也好理解噢!

因为变量少,所以不需要用到数组变量。

这样的就可以了,也能照顾到x<4时返回结果
  1. Function a(x)
  2.     If x > 3 Then
  3.         t1 = 1: t2 = 1: t3 = 2 '1,1,2 开始的数列 或 t1 = 0: t2 = 0: t3 = 1 成为0,0,1开始也可
  4.         For i = 4 To x
  5.             t = t1 + t2 + t3
  6.             t1 = t2: t2 = t3: t3 = t
  7.         Next
  8.         a = t
  9.     Else
  10.         If x = 3 Then a = 2 Else a = 1
  11.     End If
  12. End Function
复制代码
我的才是最佳答案。呵呵。


回复

使用道具 举报

 楼主| 发表于 2013-8-29 17:30 | 显示全部楼层
谢谢群子老师

细致的回复,好查看,更好理解,方便学习!



PS:谢谢sliang28,更早回复的循环方法,一切都是我的错。。。。
回复

使用道具 举报

发表于 2013-8-29 18:14 | 显示全部楼层
香川群子 发表于 2013-8-29 17:20
因为变量少,所以不需要用到数组变量。

这样的就可以了,也能照顾到x

我觉得是画蛇添足,这个数列 X 小于4没有意义,本身就是前三个相加为下一个, 另外数组怎么了,变量和数组不是一样的用.
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-28 14:35 , Processed in 0.417547 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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