Day 6斐波那契数列

计算斐波那契数列从第3项开始后,每一项的值就是前两项的和。用两个变量来储存最近产生的值。计算完后需要更新这两个变量的值。

输入正整数n(1<=n<=46),输出斐波那契数列的前n项,每行输出5个

//斐波那契数列
/*斐波那契数列的前n项:1,1,2,3,5,8,13,…,每行输出5个
Fibonacci数列就是满足任一项数字是前两项的和
(最开始两项均定义为1)的数列 */
#include <stdio.h> 
int main (void)
{
	int x1,x2;
	int x,n,i;
	printf("Enter n:");
	scanf("%d",&n);
	if(n<1||n>46){
		printf("Invalid.\n"); 
		
	}else if(n==1){
		printf("%10d",1); 		//先输出第一项
	}else {
		x1=1;
		x2=1;
		printf("%10d%10d",x1,x2);
		for (i=3;i<=n;i++){
			x=x1+x2;
			printf("%10d",x);
			if(i%5==0){			//若i为5的倍数则换行
	
				printf("\n");
				
			}
			x1=x2;		//更新x1和x2,为下次准备
			x2=x;
			
		}
	}
	return 0;
}

测试用例

Enter n:10
         1         1         2         3         5
         8        13        21        34        55

迭代法也称辗转法,不断从变量的旧值推出新值的过程

### 使用 Apache 技术实现斐波那契数列 #### 使用 Apache Spark 实现斐波那契数列 Spark 是一种分布式计算框架,适用于大规模数据集上的批处理和流处理操作。对于简单的序列生成任务如斐波那契数列,虽然不完全发挥 Spark 的优势,但仍然可以通过 RDD 或 DataFrame API 来实现。 下面是一个基于 Scala 编写的简单例子,展示了如何使用 Spark 创建一个包含 N 斐波那契数值的列表: ```scala import org.apache.spark.sql.SparkSession val spark = SparkSession.builder.appName("Fibonacci").getOrCreate() spark.sparkContext.setLogLevel("ERROR") def fibonacci(n: Int): Seq[Int] = { @annotation.tailrec def loop(a: BigInt, b: BigInt, count: Int, acc: List[BigInt]): List[BigInt] = if (count == n) a :: acc else loop(b, a + b, count + 1, a :: acc) loop(0, 1, 0, Nil).reverse.map(_.toInt) } // 将结果转换为RDD并收集到驱动程序节点上打印出来 val numTerms = 10 // 设置想要获取多少个斐波那契数 val fibSeries = spark.sparkContext.parallelize(fibonacci(numTerms)) println(s"Fibonacci series up to $numTerms terms:") fibSeries.collect().foreach(println(_)) spark.stop() ``` 这段代码定义了一个名为 `fibonacci` 函数用于生成指定长度的斐波那契数列,并将其封装成 RDD 进行分布式的展示[^1]。 #### 使用 Apache Flink 实现斐波那契数列 Flink 更擅长于低延迟的流式处理以及迭代型算法,在这里同样可以用它来模拟生成斐波那契数列的过程。下面是 Python 版本的例子: ```python from pyflink.dataset import ExecutionEnvironment from pyflink.table import BatchTableEnvironment, TableConfig env = ExecutionEnvironment.get_execution_environment() t_config = TableConfig() table_env = BatchTableEnvironment.create(env, t_config) def generate_fibonacci(count): result = [] a, b = 0, 1 while len(result) < count: result.append(a) a, b = b, a + b return result data = [(i,) for i in range(1)] ds = env.from_collection(data) # 注册表函数以便后续查询调用 table_env.register_function('generate_fib', lambda x: generate_fibonacci(x)[::-1]) result_table = table_env.scan("default_catalog", "default_database") \ .select("TUMBLE_START(rowtime, INTERVAL '1' DAY), TUMBLE_END(rowtime, INTERVAL '1' DAY)")\ .flat_map("generate_fib(10)") print("Generated Fibonacci sequence using PyFlink:") for row in result_table.execute_and_collect(): print(row) env.execute("Fibonacci Generator Job") ``` 此脚本创建了一个自定义 UDF(用户定义函数),该函数负责按照给定的数量返回逆序排列后的斐波那契数组合;接着通过 FlatMap 操作符应用这个逻辑至整个输入集合之上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值