• 02、输出斐波纳猰数列——递归


    输出斐波纳猰数列

    输出斐波纳猰数列

    方法一、

    程序代码如下:

    /*
        2017年3月5日10:35:17
        功能:n的阶乘采用的是递归方式实现
    */
    
    #include "stdio.h"
    long fun(int n)                                                    //注意此处的fun()是调用函数,两者之间没有空格
    { 
        if (n > 1)                                                     //此处跳出递归的条件是当n = 1时
            return (n * fun(n -1));                                    //当n的值满足条件或n = 2时程序还会执行该条语句
    
        return 1;
    }
    
    int main (void)
    {
        int n;
        /*
        while (1)
        {
            printf ("请从键盘中获取n的数值:
    ");
            scanf ("%d",&n);
            if (n >= 0)
                break;
            else
                printf ("负数是没有阶乘,请重新输入新的数值:
    ");
        }    
        */
        while (printf ("请从键盘中获取n的数值:
    "))                    //死循环,其目的是为了直至输入一个符合条件的值,
        {
                scanf ("%d",&n);                                    //在while()语句中非零(包括是一个表达式)为真,零为假
                if (n >= 0)
                    break;
                else
                printf("负数没有阶乘,请重新输入新的数值
    ");
        }
        printf ("n! = %ld
    ",fun(n));                                //此处要求按照按%ld的格式输出,主要是防止数据过大而导致数据溢出
        
        return 0;
    }
    /*    
        总结:
        ——————————————————————————————————————————
        1、%d表示输入/出为整数
           %ld表示输入/出为长整型
        2、实数型
           %f没有必要写成%lf,双精度、单精度输出控制符是一样的。
           当然是double类型时,写成printf("%lf
    ",x);也不错
        3、在VC++6.0中显示的结果:
            ———————————————————————————
            请从键盘中获取n的数值:
            6
            n! = 720
            ———————————————————————————
        ——————————————————————————————————————————
    */

     

    程序代码亮点归纳: 

    while (printf ("请从键盘中获取n的数值:
    "))                    //死循环,其目的是为了直至输入一个符合条件的值,
        {
                scanf ("%d",&n);                                    //在while()语句中非零(包括是一个表达式)为真,零为假
                if (n >= 0)
                    break;
                else
                printf("负数没有阶乘,请重新输入新的数值
    ");
        }
        printf ("n! = %ld
    ",fun(n));                                //此处要求按照按%ld的格式输出,主要是防止数据过大而导致数据溢出
    

    分析:

        此部分的目的是为了获取到一个合法的数值,如果不合法,一直输到合法为止,合法时,想要跳出循环,此处采用的是break。

        注解:break语句是跳出当前的循环体,而continue语句则是结束本次循环。

    方法二、

    递归程序代码:

    /*
        2017年3月5日11:16:02
        功能:输入一个整数n,输出斐波纳猰数列,采用的是递归算法,源代码
    */
    
    #include "stdio.h"
    int fun(int n);                                        //fun()函数的函数声明
    int main (void)
    {
        int i, n = 0;
    
        printf ("请输入一个整数n的数值:
     ");            //此时输入的n是表示第几个数
        scanf ("%d",&n);
        printf ("最后输出结果的形式是:
    ");
        for (i = 0; i < n; i++)
            printf (" %d  ", fun(i));                    //此时%d后面加的是非格式控制符,如果加
    则是转行符,当每次输出一次数据时都会换一次行
        printf ("
    ");                                    //当for循环执行完后,最后执行一次换行。
    
        return 0;
    }
    
    int fun(int n)                                        //注意在调用函数部分,函数名与小括号之间没有空格,而在其他语句,比如if、printf、scanf、、、语句与小括号之间应当存在空格
    {
        if (n==0)
            return 0;
        else if (n==1)
            return 1;
        else 
            return (fun(n-1)+fun(n-2));
    
        return 1;
    }
    /*
      总结:
      1、非格式控制符:逗号,空格等等
    
      2、在VC++6.0中显示的结果:
      ————————————————————————
        请输入一个整数n的数值:
        5
        最后输出结果的形式是:
        0   1   1   2   3
      ————————————————————————
    */
    

      

  • 相关阅读:
    js内置date类
    获取下拉列表的value
    表单的隐藏与显示
    JavaScript
    CSS的相关属性
    CSS
    基于akka-http搭建restfull框架
    Netsharp配置文件
    nginx配置备忘
    docker安装radis
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/6518247.html
Copyright © 2020-2023  润新知