递归的可视化

修改递归函数,使其能够显示打印出每次函数递归调用的形参的值。

每一级调用的输出都带有一级缩进,就是使得程序的输出清晰、有趣并且有含义。

思路

以斐波那契数列为例,假设n=5,递归的形参如下:

 1------------------- 5
2-----------------/ \
3---------------4 3
4-------------/ \ / \
5-----------3 2 2 1
6---------/ \
7--------2 1

效果图如下:

代码实现

 #include<stdio.h>
#include<stdlib.h>
#define MAX 50 long Fibonacci(long num);
void push(int i);
int pop(void);/*堆栈*/
int stack[MAX];/*栈顶*/
int tos = ; /*主函数*/
int main()
{
int seriesSize = ;/*数列的长度*/
printf("此函数将生成Fibonacci数列\n");
printf("请输入希望生成的数列的项数:");
scanf("%d", &seriesSize); printf("\nFibonacci数列的第%d项是:%d", seriesSize, Fibonacci(seriesSize));
printf("\n"); return ;
}/*end miain*/ /*计算Fibonacci数列的第n项*/
long Fibonacci(long num)
{
static int d = ;
if (d == )
push(); d++;
for (int i = ; i < * d; i++)
printf(" ");
printf("第%d层递归调用:形参num=%ld\n", d, num);
if (num == || num == )
{
d = pop();
return ;
}
else
{
push(d);
return(Fibonacci(num - ) + Fibonacci(num - ));
}
} /*函数push:入栈函数*/
void push(int i)
{
if (tos >= MAX)
{
printf("Stack Full\n");
}
stack[tos] = i;
tos++;
} /*函数pop:出栈函数*/
int pop(void)
{
tos--;
if (tos < )
{
printf("Stack Underflow\n");
return ;
}
return stack[tos];
}

递归的可视化(Fibonacci)的更多相关文章

  1. Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

    什么是递归?简单的说就是:函数自身调用自身. “普通程序员用迭代,天才程序员用递归” 虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢, 但在一些算法上面仍然是递归 ...

  2. 【C语言入门教程】5.4 递归

    递归函数 是能够直接或通过另一个函数间接调用自身的函数,调用自身的方法称为递归调用.递归调用的本质是使用同一算法将复杂的问题不断化简,直到该问题解决. 例如求斐波那契数列的某一项算法适用于递归函数实现 ...

  3. 几年前做家教写的C教程(之三专讲了递归和斐波那契)

    C语言学习宝典(3) 数组: 一维数组的定义: 类型说明符  数组名[常量表达式] 例如: int  a[10]; 说明:(1)数组名的命名规则和变量名相同,遵循标示符命名规则 (2)在定义数组时需要 ...

  4. Fibonacci数列的解法

    Fibonacci数列的解法: 1.递归算法 递归的概念,我说不清楚,语文不好.但是核心思想,我认为就是入栈出栈.比方说,你想要求得某个结果,如果一步求解不出来,那么先把最后一步的计算步骤进栈,先不考 ...

  5. 使用Python语言理解递归

    递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面 ...

  6. 用Python实现求Fibonacci数列的第n项

    1. 背景——Fabonacci数列的介绍(摘自百度百科): 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacc ...

  7. 【算法】Fibonacci(斐波那契数列)相关问题

    一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...

  8. python中的递归

    python中的递归 关注公众号"轻松学编程"了解更多. 文章更改后地址:传送门 间接或直接调用自身的函数被称为递归函数. 间接: def func(): otherfunc() ...

  9. 转: JAVA递归算法实例小结

    一.递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候 ...

随机推荐

  1. 【旧文章搬运】ZwQuerySystemInformation枚举内核模块及简单应用

    原文发表于百度空间,2008-10-24========================================================================== 简单说,即 ...

  2. Hello World 4 JQuery

    Hello World 4 JQuery <html> <head> <script type="text/javascript" src=" ...

  3. 016--python文件处理

    一.操作文件流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例代码: f = open('chenli.txt') #打开文件 first_line = ...

  4. Node学习图文教程之express重写留言本案例

    写在前面 小伙伴们大家好,我是你们的pubdreamcc,接着前面的学习,这篇博文出至于我的GitHub仓库:Node学习教程资料,如果你觉得对你有帮助,欢迎star,你们的点赞是我持续更新的动力,谢 ...

  5. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(七) 学生信息增删

    前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/asp ...

  6. 洛谷 - P2261 - 余数求和

    https://www.luogu.org/problemnew/show/P2261 看了一下题解,取模运算可以换成减法来做. $a\%b=a-b*\lfloor\frac{a}{b}\rfloor ...

  7. iOS开发检测是否开启定位、是否允许消息推送等权限

    1.iOS开发检测是否开启定位: 需要导入: #import <CoreLocation/CoreLocation.h> 代码如下: + (void)openLocationService ...

  8. hdoj3664【DP】

    题意: 有一种值E=the number of elements where ai > i.比如1 3 2 4,只有3位置是满足的,E=1.然后他会给你一个数组和一个k,问有多少个序列的E=k. ...

  9. Codeforces687A【未完继续....】

    http://codeforces.com/problemset/problem/687/A

  10. shell Syntax error: Bad fd number 错误解决

    最近在玩spark , 需要看一下python的spark lib 是怎么加入环境变量的. 执行: sh -x bin/pyspark 报错 + dirname bin/pyspark + cd bi ...