R语言,关于for()....

Q1:fn是代表nth Fibonacci 数, 如何用这个格式 fn/fn-1, n=1,2,...,30 写一个a sequence of ratios...然后这个sequence 呈示是收敛的吗?
Q2:
>answer<-3
>for ( j in 1:15) answer <- c(answer, ( 7* answer[ j ] ) %% 31)
> answer
[1] 3 21 23 6 11 15 12 22 30 24 13 29 17 26 27 3
我不明白这个for loop怎样运行。。
我个人理解,j 第1次, 3, 7*3%%31=21, 那个23怎样来的?
j第2次,3*2=6,6*7%%31=11,那个15又是哪里来的!
j第3次,3*3=9?开始混乱了。。。求详细解释下啊。。

#Q1
f = c(1,1)
for(i in 2:30) {
    print(sprintf("i=%i, f[i-1]=%i, f[i]=%i, f[i-1]/f[i]=%.4f", i, f[i-1], f[i], f[i]/f[i-1])) 
    f=c(f, (f[i-1]+f[i]))  # sum of last two element in f 
}

# Q2. 每一步都打印出值,你可以参照一下
> for ( j in 1:15) {
+    print(sprintf("j=%i, answer[j]=%i, 7*answer[j]=%i, 7*answer[j]%%31=%i", j, answer[j], 7*answer[j], (7*answer[j])%%31))
+    answer <- c(answer, ( 7* answer[ j ] ) %% 31)
+ }
[1] "j=1, answer[j]=3, 7*answer[j]=21, 7*answer[j]%31=21"
[1] "j=2, answer[j]=21, 7*answer[j]=147, 7*answer[j]%31=23"
[1] "j=3, answer[j]=23, 7*answer[j]=161, 7*answer[j]%31=6"
[1] "j=4, answer[j]=6, 7*answer[j]=42, 7*answer[j]%31=11"
[1] "j=5, answer[j]=11, 7*answer[j]=77, 7*answer[j]%31=15"
[1] "j=6, answer[j]=15, 7*answer[j]=105, 7*answer[j]%31=12"
[1] "j=7, answer[j]=12, 7*answer[j]=84, 7*answer[j]%31=22"
[1] "j=8, answer[j]=22, 7*answer[j]=154, 7*answer[j]%31=30"
[1] "j=9, answer[j]=30, 7*answer[j]=210, 7*answer[j]%31=24"
[1] "j=10, answer[j]=24, 7*answer[j]=168, 7*answer[j]%31=13"
[1] "j=11, answer[j]=13, 7*answer[j]=91, 7*answer[j]%31=29"
[1] "j=12, answer[j]=29, 7*answer[j]=203, 7*answer[j]%31=17"
[1] "j=13, answer[j]=17, 7*answer[j]=119, 7*answer[j]%31=26"
[1] "j=14, answer[j]=26, 7*answer[j]=182, 7*answer[j]%31=27"
[1] "j=15, answer[j]=27, 7*answer[j]=189, 7*answer[j]%31=3"
>

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
Q1
n <- 1:30
f <- c(1,1)
for (i in n) f <- c(f, f[length(f)-1]+f[length(f)])
for (i in 1:(length(f)-1)) print(f[i]/f[i+1])
从结果可以看到,貌似收敛到 0.618
Q2
1) answer <- c(3)
在for循环里:
#每次都从answer中取最后一项,并把计算结果存到answer中(作为最后一项);
2) j =1时: answer <- c(answer, ( 7* answer[ 1 ] ) %% 31) ==> answer = c(3, 21)
3) j =2时:answer <- c(answer, ( 7* answer[ 2 ] ) %% 31) => answer = c(3,21, 21*7%%31)
--->23<-----
4) ...
16)j=15时: answer中有16个元素;追问

书给个Fibonacci公式是 F[1] <- F[2] <- 1, for ( i in n) F[i] <- F[i-2] + F[i-1]
和你那个 f <- c(f, f[length(f)-1]+f[length(f)]) 的区别在哪?

追答

f[1] f = c(1,1)
f[i] <- f[i-2] + f[i-1] 的意思是第三项是第一项和第二项的和 ,和我的也是风格不同,你的代码更符合r的风格
r语言的数组可以增长,当下标超出当前的实际长度时,数组就增长到下标长度;
所以F[i] <- F[i-2] + F[i-1]的意思是:数组F长度增长1,增长的这项的取值是前两项的和;
我的代码把这个过程展开了,f <- c(f, f[length(f)-1]+f[length(f)])的意思是
f重新赋值,取值是这样一个数组,这个数组包含原来的f全部,并在最后追加一项,这一项的值是数组f的最后两项的和;其中length(f)是取数组f的最后一项的下标,length(f)-1是倒数第二项的下标;c(数组,元素)的意思是把用数组和元素构成一个新的数组,新数组的长度是旧数组的长度+1;

本回答被提问者和网友采纳
第2个回答  2013-07-18
没错去去去去去去去去去去去去去去去去去去
相似回答