C语言初学者 斐波那契数列求和

yangqcjason 2014-10-27 12:02:09
想用递归,但是学长说我用的不伦不类,不知道最普通的递归怎么做,求解答。
...全文
2620 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-10-28
  • 打赏
  • 举报
回复
楼上的代码看起来是递归,其实不是,不过他体现了递归的思想,运行起来应该比递归快
「已注销」 2014-10-28
  • 打赏
  • 举报
回复
我以前写的
/*************************************************************************
    > File Name: fb.cpp
    > Author: Jukay
    > Mail: hellojukay@gmail.com 
    > Created Time: 2014年10月17日 星期五 18时00分28秒
 ************************************************************************/
#include<vector>
#include<iostream>
using namespace std;
int main()
{
	long fib(int,vector<int>&);
	vector<int> v1;
	for(int i=0;i<=60;i++)
	{
		v1.push_back(fib(i,v1));
	}
	for(auto s:v1)
		cout<< s <<endl;
	return 0;
}
long fib(int n,vector<int> &v)
{
	if(n==0 || n==1)
		return 1;
	else
		return v[n-2] + v[n-1];
}
mymtom 2014-10-27
  • 打赏
  • 举报
回复

#include <stdio.h>

int
fib(int i)
{
    if (i == 0 || i == 1) {
        return i;
    } else {
        return fib(i - 1) + fib(i - 2);
    }
}

int
main(int argc, char *argv[])
{
    int i, n;

    n = 30;
    for (i = 0; i < n; ++i) {
        printf("F(%d)=%d\n", i, fib(i)); 
    }

    return 0;
}
阳光_八月 2014-10-27
  • 打赏
  • 举报
回复
#include<iostream>
#include<stdio.h>
using namespace std;
int f(int i)
{
	if(i==1||i==2)
		return 1;
	else
		return f(i-1)+f(i-2);
}
int main()
{
	int i;
	for(i=1;i<=20;i++)
	{
		printf("%8d",f(i));
		if(i%5==0)
			printf("\n");
	}
	return 0;
}
dbzhang800 2014-10-27
  • 打赏
  • 举报
回复
引用 楼主 yangqcjason 的回复:
想用递归,但是学长说我用的不伦不类,不知道最普通的递归怎么做,求解答。
你这不是递归的问题吧,感觉你需要好好补补的是C语言的基础。
常书 2014-10-27
  • 打赏
  • 举报
回复
//1 1 2 3 5 8 13 21 34 55 89 1 1 2 1+1 3 (1+1)+2 4 (1+1+2)+3 5 (1+1+2+3)+5 6 (1+1+2+3+5)+8 fun(1)==1 fun(2)==fun(1)+1 fun(3)==fun(2)+2 fun(4)==fun(3)+3 fun(5)==fun(4)+5 fun(6)==fun(5)+8 sumfun(0)==0 sumfun(1)==sumfun(0)+1 sumfun(2)==sumfun(1)+1 sumfun(3)==sumfun(2)+2 sumfun(4)==sumfun(3)+3 sumfun(5)==sumfun(4)+5 sumfun(6)==sumfun(5)+8 可以看到,sumfun求和递归时,应是前一个求和值加一个斐波那契数列,数列生成用如下递归 fiber(1)==1 fiber(2)==1 fiber(3)==fiber(1)+fiber(2) fiber(4)==fiber(2)+fiber(3) fiber(5)==fiber(3)+fiber(4) 即fiber(1)=1,fiber(2)=1,n>2则fiber(n)=fiber(n-1)+fiber(n-2) 因此,sumfun的递归表述为:sumfun(0)=0,n>0则sumfun(n)==sumfun(n-1)+fiber(n) 原理如下,代码你自己来,祝你成功
内容概要:本文档汇集了多个C语言程序示例,涵盖了从基础算法到复杂数据结构的应用。其中包括:个人所得税计算、级数求和斐波那契数列、百钱百鸡问题、最大公约数与最小公倍数计算、特定范围内的数(如水仙花数、闰年、回文数、素数、完数)、递归函数求阶乘、一维数组操作(包括统计正负数和奇偶数、排序、字符数组处理)、二维数组操作(包括统计正负数和奇偶数、变换操作、杨辉三角)。每个程序不仅展示了具体的算法实现,还涉及了基本的输入输出、条件判断、循环控制以及函数定义等编程技巧。 适合人群:具备一定编程基础,特别是对C语言有一定了解的学习者或开发者。 使用场景及目标:①帮助初学者理解并掌握C语言的基本语法和常用算法;②提供实际编程练习的机会,增强动手能力和解决问题的能力;③作为参考手册,在遇到类似问题时可以快速查阅相关代码实现。 其他说明:文档中的程序大多简洁明了,适合用于教学或自学。读者可以通过运行这些程序来加深对C语言的理解,并尝试修改代码以探索更多可能性。此外,文档还强调了良好的编程习惯,如合理的变量命名、适当的注释等,有助于培养规范化的编程风格。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧