首页 > 其他分享 >全网最易懂的解题——C语言“求斐波那契数(递归)”

全网最易懂的解题——C语言“求斐波那契数(递归)”

时间:2024-08-27 09:56:14浏览次数:13  
标签:契数 求斐波 return int C语言 Fib printf 斐波

那先来知道什么是斐波那契数列吧

前两个数相加等于第三个数,如果其中数字都满足此条件,那么这就是斐波那契数列 

现在我们要求第n个斐波那契数,代码框架先搭出来吧,找斐波那契数的函数就命名为Fib吧

//求斐波那契数
int main()
{
	int n = 0;
	printf("请输入你想知道第几个斐波那契数的值:");
	scanf("%d", &n);
	Fib(n);//封装一个函数,找到第n个斐波那契数
	return 0;
}

那么怎么把”前两个数之和等于第三个数“的规则翻译成我们的代码呢

//求斐波那契数(递归)
int Fib(int n)
{
	if (n <= 2)//前两个斐波那契数是1
	{
		return 1;
	}
	if (n>2)
	{
		return Fib(n - 1) + Fib(n - 2);
	}
}


int main()
{
	int n = 0;
	printf("请输入你想知道第几个斐波那契数的值:");
	scanf("%d", &n);
	int f = Fib(n);//封装一个函数,检查是不是斐波那契数
	printf("%d", f);

	return 0;
}

当然像斐波那契数这种树杈型的计算方式,我们n的数字如果给的太大,计算机计算时间会非常久,并且可能会导致报错。这就是在一些情况下递归会带来明显的缺陷时,那我们尽量就别用递归。

 这边也附上更优的方案 用循环求出斐波那契数

int Fib(int n)
{
	int a = 1;//第一个数
	int b = 1;//第二个数
	int c = 0;//第三个数
	if (n <= 2)
	{
		return 1;
	}
	while (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

//求斐波那契数(循环)
int main()
{
	int n = 0;
	printf("请输入你想知道第几个斐波那契数的值:");
	scanf("%d", &n);

	int f = Fib(n);
	printf("%d", f);

	return 0;
}

 电脑看久了,点完赞就休息一会儿吧

标签:契数,求斐波,return,int,C语言,Fib,printf,斐波
From: https://blog.csdn.net/CPP_ZhouXuyang/article/details/141529340

相关文章

  • 链表-单链表的基本操作及C语言代码实现
    1.遍历单链表(打印,修改)便利的概念想必大家都不会陌生,即就是从链表的头开始,逐步向后进行每一个元素的访问,这就是遍历,对于遍历操作,我们可以衍生出很多常用的数据操作,比如说查询元素,修改元素,获取元素个数,打印整个链表数据等等。进行遍历的思路极其简单,只需要建立一个指向链表L的......
  • 链表-双向链表的基本设计(C语言代码实现)
    1.双向链表的简介&概念单链表在很多时候已经可以胜任很多优秀的操作了,但是,单链表任然存在不足,所谓‘单链表’,是指结点中只有一个指向其后继的指针,具有单向性,有时需要搜索大量数据的时候,就必须要多次进行从头开始的遍历,这样的搜索不是很便利。图:单链表示意图对此在单链表的......
  • 手把手带你用C语言实现控制台小游戏扫雷(附源码)
    文章目录一、扫雷游戏整体设计思路1.扫雷游戏功能说明2.游戏的分析和设计3.文件结构设计:二、主函数大致模型三、创建棋盘四、初始化棋盘五、打印棋盘六、布置雷七、排查雷八、源码九、如何把游戏分享给小伙伴十、扫雷进阶的一些思路一、扫雷游戏整体设计思路1.扫雷......
  • C语言程序设计-实现三(N)子棋游戏
    画自己喜欢的画,别停笔小艺术家。实现三子棋:test.c //测试游戏的逻辑#include"game.h"//自己的头文件voidmenu(){ printf("*****************************\n"); printf("******1.play0.exit******\n"); printf("*****************************\n&quo......
  • 【C语言】详解函数
    文章目录前言一、函数的概念二、自定义函数1.函数的语法形式2.形参和实参3.return语句三、库函数1.标准库和头文件2.库函数的使用四、函数的声明和定义五、传值调用和传址调用六、嵌套调用和链式访问1.嵌套调用2.链式访问前言一、函数的概念二~三、自定义函......
  • 新手专科准大一学习c语言的第10天之strcpy、memset、自定义函数的学习与应用
    strcpystrcpy是C语言标准库中的一个字符串操作函数,用于将源字符串复制到目标字符串中。#include<stdio.h>#include<string.h>intmain(){chararr1[50];//确保目标数组足够大,能够容纳源字符串chararr2[]="helloworld";//源字符串......
  • [我的C语言学习笔记(08)]C语言输入输出以及缓冲区概念
    查阅stdio.h标准库(https://cplusplus.com/reference/cstdio/),可以发现不少输入输出函数。这些是格式输入输出:这些是字符(包括字符串,也即字符数组)输入输出:这篇会介绍几个常用函数的用法,同时介绍缓冲区的概念。文章目录stream的概念输出printf函数putchar函数pu......
  • 【C语言】宏定义详解---老公出轨版 (づ◡﹏◡)づ
    目录C语言宏定义详解1.宏定义关键词总览2.`#define`3.`#undef`4.`#ifdef`5.`#ifndef`6.`#if`7.`#else`8.`#elif`9.`#endif`10.`#include`11.`#error`12.`#pragma`12.1`#pragmaonce`12.2`#pragmapack`12.3`#pragmawarning`12.4`#pragmaGCC`13.`#li......
  • C语言--类型转换
    数据的类型不同,在进行混合运算时会涉及到类型转换问题,转换的方法有哪些?一、自动转换:遵循一定的规则,由编译系统自动完成.(一)自动转换的原则:1、占用内存字节数少(取值范围小)的类型,向占用内存字节数多(取值范围大)的类型转换,目的是为了保证精度不降低.2、转换方向:3、当......
  • C语言02 每日一练01
    C语言02每日一练01习题一对三个数进行从大到小的排序。习题二计算1到100的和(两种方法)。习题三判断100到200中的素数及其个数。习题一对三个数进行从大到小的排序。   对三个数进行从大到小的排序。 解题代码:#include<stdio.h>intmain(){int......