c语言的cps实现求fibonacci数列示例_C 语言

CPS:http://en.wikipedia.org/wiki/Continuation-passing_style
示例代码使用迭代 + 尾递归。

复制代码 代码如下:

#include <stdio.h>

typedef void (*END_OF_END)(unsigned long);
void fibonacci(int, unsigned long, unsigned long, void(*)(unsigned long));

void
notify(unsigned long res) {
  printf("Ultimate result: %lu\n" res);
  exit(0);
}

/* Note: Fibonacci number might overflow! */
void
fibonacci(int n, unsigned long v1, unsigned long v2, void(*notify)(unsigned long)) {
  if (n <= 0) notify(v2);
  fibonacci(n - 1, v2, v1 + v2, notify);
}

int
main(void) {
  fibonacci(100 - 2, 1, 1, notify);
  return 0;
}

时间: 2024-09-29 16:56:25

c语言的cps实现求fibonacci数列示例_C 语言的相关文章

c语言求阶乘精确值示例_C 语言

复制代码 代码如下: #include <stdio.h>#include <string.h>const int maxn = 3000;int f[maxn];int main(){ int i,j,n; scanf("%d",&n); memset(f,0,sizeof(f)); f[0] = 1; for(i = 2;i <= n;i++) {  int c = 0;  for(j = 0;j < maxn;j++)  {   int

C语言之没有main函数的helloworld示例_C 语言

几乎所有程序员的第一堂课都是学习helloworld程序,下面我们先来重温一下经典的C语言helloworl 复制代码 代码如下: /* hello.c */  #include <stdio.h>    int main()  {      printf("hello world!\n");      return 0;  }  这是一个简单得不能再单的程序,但它包含有一个程序最重要的部分,那就是我们在几乎所有代码中都能看到的main函数,我们编译成可执行文件并查看符号表

C++、python和go语言实现的简单客户端服务器代码示例_C 语言

工作中用到了C/S模型,所做的也无非是给服务器发数据,但开发阶段会遇到程序自身的回环测试,需要用到简单的服务端以便验证数据发送的正确性. 写软件用C++,跑测试用python,这段时间也刚好看go语言,所以都要有demo.以下三组程序实现的功能相同,这里一起做下总结. 一.C++实现 Boost.Asio是一个跨平台的C++库,它用现代C++方法为网络和底层I/O程序提供了一致的异步I/O模型. 为了跨平台,我用boost库实现,具体如下. 服务端代码: 复制代码 代码如下: /*      F

C语言 循环详解及简单代码示例_C 语言

C 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图: 循环类型 C 语言提供了以下几种循环类型.点击链接查看每个类型的细节. 循环类型 描述 while 循环 当给定条件为真时,重复语句或语句组.它会在执行循环主体之前测试条件. for 循环 多次执行一个语句序列,简化管理循环变量

C++项目参考解答:求Fibonacci数列

[项目:求Fibonacci数列] Fibonacci数列在计算科学.经济学等领域中广泛使用,其特点是:第一.二个数是1,从第3个数开始,每个数是其前两个数之和.据此,这个数列为:1 1 2 3 5 8 13 21 34 55 89 --,请设计程序,输出这个数列,直到这个数字超过10000. [提示]数列可以表示为: {f1=f2=1fn=fn−1+fn−2,n>2 [参考解答] #include <iostream> using namespace std; int main( )

c语言-ACM的问题求大家解答,C语言

问题描述 ACM的问题求大家解答,C语言 问题如下 Description 计算:t=1-1/(2*2)-1/(3*3)-...-1/(m*m) Input 整型变量m Output t(保留六位小数) Sample Input 10 Sample Output 0.450232 HINT 代码如下 #include #include int main() { int m,n; float t=1; scanf("%d",&m); { for(n=2;n<=m;n++)

一波C语言二元查找树算法题目解答实例汇总_C 语言

按层次遍历二元树问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印.  例如输入: 8 / / 6 10 / / / / 5 7 9 11 输出 8 6 10 5 7 9 11           定义二元树(其实是二元搜索树,但并不遍历算法)的结点为: struct BSTreeNode { int value; BSTreeNode *left; BSTreeNode *right; };       思路:利用队列的先进先出,很容易实现.每次取出队列的首

C语言编程中函数的基本学习教程_C 语言

C 语言中的函数等价于 Fortran 语言中的子程序或函数,也等价于 Pascal 语言中的过程或函数.函数为计算的封装提供了一种简便的方法,此后使用函数时不需要考虑它是如何实现的.使用设计正确的函数,程序员无需考虑功能是如何实现的,而只需知道它具有哪些功能就够了.在 C 语言中可以简单.方便.高效地使用函数.我们经常会看到在定义后仅调用了一次的短函数,这样做可以使代码段更清晰易读. 到目前为止,我们所使用的函数(如 printf.getchar 和 putchar 等)都是函数库中提供的函数

C++快速幂与大数取模算法示例_C 语言

一.快速幂 其实就是求(a^b)% p ,(其中a,b,p都比较大在int范围内)这类问题. 首先要知道取余的公式: (a*b)%p=(a%p*b%p)%p . 那么幂不就是乘机的累积吗,由此给出代码: int fast(int a,int b,int p) { long long a1=a,t=1; while(b>0) { if(b&1) /如果幂b是奇数多乘一次,因为后边会除2变偶数,(7/2=3) t=(t%p)*(a1%p)%p; a1=(a1%p)*(a1%p)%p; b/=2;