【算法】Fibonacci(斐波那契数列)相关问题
程序员文章站
2022-12-11 08:22:37
一、列出Fibonacci数列的前N个数 二、求出Fibonacci数列第N个数字(递归) 三、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 问题分析:其兔子数目依旧是按1,1,2,3,5…的顺序进行排 ......
一、列出fibonacci数列的前n个数
using system; using system.collections.generic; using system.linq; using system.text; namespace fibonacci { class program { static void main(string[] args) { cal(20); cal2(20); //运行结果相同 } /*需求:列出fibonacci数列的前n个数*/ //方案一:迭代n次,一次计算一项 public static void cal(int n) { int f1 = 1; int f2 = 1; int f = 0; for (int i = 1; i <= n; i++) { if (i == 1) { console.write(f1); console.write(" "); } else if (i == 2) { console.write(f2); } else { f = f1 + f2; f2 = f1; f1 = f; console.write(" "); console.write(f); } } } //方案二:迭代n/2次,一次计算两项 public static void cal2(int n) { int f1 = 1; int f2 = 1; for (int i = 1; i <= n / 2; i++) { console.write(" "); console.write(f1); console.write(" "); console.write(f2); f1 = f1 + f2; f2 = f2 + f1; } }
二、求出fibonacci数列第n个数字(递归)
namespace fibonacci { class program { static void main(string[] args) { string n = console.readline(); int integer = convert.toint32(n); console.writeline("{0}",f(integer)); } /*需求:求出fibonacci数列第n个数字*/ //递归 public static int f(int n) { if (n == 1) return 1; if (n == 2) return 1; else return f(n - 1) + f(n - 2); } } }
三、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
问题分析:其兔子数目依旧是按1,1,2,3,5…的顺序进行排列。其本质仍为斐波那契数列。
解决:按照一中的方案二进行即可。
namespace fibonacci { class program { static void main(string[] args) { //与方案二相同 string n = console.readline(); int integer = convert.toint32(n); int f1 = 1; int f2 = 1; for (int i = 1; i <= integer; i++) { console.write("{0} {1}",f1,f2); console.write(" "); if (i%2==0) console.writeline("\n"); f1 = f1 + f2; f2 = f2 + f1; } } } }
若后续有相关问题,余则继续补充。
愿诸位朋友及时指正!