注册 登录
编程论坛 VFP论坛

c++for循环

小猴子不服输 发布于 2023-01-07 19:20, 1552 次点击
怎么用fou循环打印出费波纳契数列前20项啊 书上给的好多地方都看不懂 求大佬
12 回复
#2
吹水佬2023-01-07 22:34
可以去C++版块问问
#3
sam_jiang2023-01-09 15:50
跑错片场了。。。
#4
sam_jiang2023-01-09 18:37
给出vfp代码如下:

CLEAR
FOR i=1 TO 20
    ?fx(i)
ENDFOR

FUNCTION fx
PARAMETERS num
ON ERROR cancel
IF num=1 OR num=2
    nreturn=1
ENDIF
IF num>2
    nreturn=fx(num-1)+fx(num-2)
ENDIF
RETURN nreturn   
ENDFUNC

#5
sam_jiang2023-01-09 19:00
上面这段递归代码运行好像比较慢,可以用下面一段代码,运行速度快多了。
程序代码:

PARAMETERS n
clea
n=20
DIMENSION sz(n)
FOR i=1 TO n
    IF i<3
        sz(i)=1
    ELSE
        sz(i)=sz(i-1)+sz(i-2)
    ENDIF
ENDFOR
FOR j=1 TO n
    ?sz(j)
ENDFOR
#6
sam_jiang2023-01-09 19:55
还可以更简洁:
local a,b,i
STORE 1 TO a,b
FOR i=1 to 10   
    ?a,b
    a=b+a
    b=a+b         
endfor
#7
sam_jiang2023-01-09 23:18
以下是引用sam_jiang在2023-1-9 19:55:52的发言:

还可以更简洁:
local a,b,i
STORE 1 TO a,b
FOR i=1 to 10   
    ?a,b
    a=b+a
    b=a+b         
endfor

上面这段好像只能实现偶数个数,不能实现奇数个数。因此还可以优化,让它速度更快,占用内存更少:
local a,b,c,i
a=0
b=1
c=1
FOR i=1 to 20
    ?c
    c=a+b   
    a=b
    b=c
ENDFOR
#8
独木星空2023-01-10 22:48
回复 7楼 sam_jiang
看样子把它吃透了!
#9
sam_jiang2023-01-11 09:31
回复 8楼 独木星空
因为首先想到的是用递归方法,可没想到运行速度奇慢。就琢磨着怎么改进算法,提高运行速度!
#10
hu1dao2023-01-12 00:39
回复 7楼 sam_jiang
b=1
a=0
FOR i=1 TO 10   
    i=a+b
    ?i
    STORE i TO  (IIF(a>b,"b","a"))
ENDFOR
#11
hu1dao2023-01-12 00:48
回复 10楼 hu1dao
来个一行代码的
EXECSCRIPT("a=0"+chr(10)+"b=1"+chr(10)+"FOR i=1 TO 20"+chr(10)+"i=a+b"+chr(10)+"?i"+chr(10)+[STORE i TO  (IIF(a>b,"b","a"))]+CHR(10)+"ENDFOR")
#12
sam_jiang2023-01-14 10:02
回复 10楼 hu1dao
你这方法不行啊,哥们。无法得到正确答案的个数。

for循环中不要更改i的值(不要对i另外赋值,或使用同名变量i),否则会出现无法预测的错误。
#13
sam_jiang2023-01-14 10:03
回复 11楼 hu1dao
执行脚本,看似一行代码,实际上依然是多行代码。
1