以下是代码:
class Fibonacci {
static final int MIN_INDEX = 1;
public static void main (String[] args){
int high = 1;
int low = 1;
String jel;
System.out.println("9: " + high);
for (int i = 8; i >= MIN_INDEX; i--){
if (high % 2 == 0)
jel = " *";
else
jel = " ";
System.out.println(i + ": " + high + jel);
high = low + high;
low = high - low;
}
}
}
我想制作这个程序,向后写输出数字。所以我不仅希望从最后一个到第一个的'i'步骤,而且也希望数字。
在这个例子中,输出是:1,1,2,3,5,8,例如...但我想在序列中显示它:例如......,8,5,3, 2,1,1。
我试图改变高低,但我不能让这个程序强制“向后”运行。
答案 0 :(得分:6)
此处没有Java,但是Fibonacci numbers have an explicit closed form:
f[n_] := N@(GoldenRatio^n - (1 - GoldenRatio)^n)/Sqrt[5];
哪里
GoldenRatio =(1 + Sqrt [5])/ 2
所以你可以这样做:
For[i = 10, i > 0, i--,
Print[f[i]];
];
输出:
55.
34.
21.
13.
8.
5.
3.
2.
1.
1.
修改
另外,The Golden Ratio是你在自然,科学和艺术中可以找到的那些美妙无常的数字之一。
您可以找到从Sea Shells到帕台农神庙的黄金比例。
答案 1 :(得分:2)
你可以在进行数组时将它们插入数组中,然后将数组反转并打印出来? 效率不高,但很容易做到。
答案 2 :(得分:2)
有两种可能性:
r
来生成并打印反向系列r[i]=r[i-2]-r[i-1]
。答案 3 :(得分:2)
int high = 8;
int low = 5;
while (low > 0) {
System.out.println(high);
int temp = low;
low = high - low;
high = temp;
}
答案 4 :(得分:0)
一种选择是将输出存储在数组中,然后向后遍历数组。
答案 5 :(得分:0)
由于Fibonacci序列的性质,您可以将所有元素存储到数据结构中然后向后打印出来,因为每个值(第一个和第二个除外)取决于前两个值的总和。
答案 6 :(得分:0)
Yup ..就像其他人说的那样..我会存储在一个集合中,然后排序和打印
我刚修改了你的例子......运行它,看看这是否是你期望的行为。
class Fibonacci {
static final int MIN_INDEX = 1;
public static void main(String[] args) {
int high = 1;
int low = 1;
String jel;
List<String> numbers = new ArrayList<String>();
numbers.add("9: " + high);
for (int i = 8; i >= MIN_INDEX; i--) {
if (high % 2 == 0) {
jel = " *";
}
else {
jel = " ";
}
numbers.add(i + ": " + high + jel);
high = low + high;
low = high - low;
}
Collections.sort(numbers);
System.out.println(numbers);
}
}
答案 7 :(得分:0)
我也会正常运行序列(即不反向)并将结果存储在一个集合中(可能是一个ArrayList)。但是不需要以相反的顺序对列表进行排序甚至遍历,您可以在序列中将每个新的“条目”添加到列表中的位置0:
list.add(0, i + ": " + high + jel);
这将确保列表以相反的顺序存储序列。
这只是另一种可能的解决方案。