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

yangqcjason 2014-10-27 12:02:09
想用递归,但是学长说我用的不伦不类,不知道最普通的递归怎么做,求解答。
...全文
2619 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) 原理如下,代码你自己来,祝你成功

70,022

社区成员

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

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