zoukankan      html  css  js  c++  java
  • 递归的可视化(Fibonacci)

    递归的可视化

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

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

    思路

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

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

    效果图如下:

    代码实现

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define MAX 50
     4 
     5 long Fibonacci(long num);
     6 void push(int i);
     7 int pop(void);/*堆栈*/
     8 int stack[MAX];/*栈顶*/ 
     9 int tos = 0;
    10 
    11 /*主函数*/
    12 int main()
    13 {
    14     int seriesSize = 0;/*数列的长度*/
    15     printf("此函数将生成Fibonacci数列
    ");
    16     printf("请输入希望生成的数列的项数:");
    17     scanf("%d", &seriesSize);
    18 
    19     printf("
    Fibonacci数列的第%d项是:%d", seriesSize, Fibonacci(seriesSize));
    20     printf("
    ");
    21 
    22     return 0;
    23 }/*end miain*/
    24 
    25 /*计算Fibonacci数列的第n项*/
    26 long Fibonacci(long num)
    27 {
    28     static int d = 0;
    29     if (d == 0)
    30         push(0);
    31 
    32     d++;
    33     for (int i = 0; i < 6 * d; i++)
    34         printf(" ");
    35     printf("第%d层递归调用:形参num=%ld
    ", d, num);
    36     if (num == 0 || num == 1)
    37     {
    38         d = pop();
    39         return 1;
    40     }
    41     else
    42     {
    43         push(d);
    44         return(Fibonacci(num - 1) + Fibonacci(num - 2));
    45     }
    46 }
    47 
    48 /*函数push:入栈函数*/
    49 void push(int i)
    50 {
    51     if (tos >= MAX)
    52     {
    53         printf("Stack Full
    ");
    54     }
    55     stack[tos] = i;
    56     tos++;
    57 }
    58 
    59 /*函数pop:出栈函数*/
    60 int pop(void)
    61 {
    62     tos--;
    63     if (tos < 0)
    64     {
    65         printf("Stack Underflow
    ");
    66         return 0;
    67     }
    68     return stack[tos];
    69 }
  • 相关阅读:
    pip install uwsgi 报错 AttributeError: module 'os' has no attribute 'uname'
    npm安装vue
    Node.js安装及环境配置之Windows篇
    Centos7 安装nodejs
    Centos7 Jenkins 插件下载速度慢、安装失败
    Centos7 使用docker 安装redis
    Centos7 安装jdk
    supervisor配置文件详解
    MySQL5.7 group by新特性,报错1055
    配置python虚拟环境Virtualenv及pyenv
  • 原文地址:https://www.cnblogs.com/lfri/p/9889784.html
Copyright © 2011-2022 走看看