首页 > 技术文章 > 02、输出斐波纳猰数列——递归

wxt19941024 2017-03-08 10:42 原文

输出斐波纳猰数列

输出斐波纳猰数列

方法一、

程序代码如下:

/*
    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的数值:\n");
        scanf ("%d",&n);
        if (n >= 0)
            break;
        else
            printf ("负数是没有阶乘,请重新输入新的数值:\n");
    }    
    */
    while (printf ("请从键盘中获取n的数值:\n"))                    //死循环,其目的是为了直至输入一个符合条件的值,
    {
            scanf ("%d",&n);                                    //在while()语句中非零(包括是一个表达式)为真,零为假
            if (n >= 0)
                break;
            else
            printf("负数没有阶乘,请重新输入新的数值\n");
    }
    printf ("n! = %ld\n",fun(n));                                //此处要求按照按%ld的格式输出,主要是防止数据过大而导致数据溢出
    
    return 0;
}
/*    
    总结:
    ——————————————————————————————————————————
    1、%d表示输入/出为整数
       %ld表示输入/出为长整型
    2、实数型
       %f没有必要写成%lf,双精度、单精度输出控制符是一样的。
       当然是double类型时,写成printf("%lf\n",x);也不错
    3、在VC++6.0中显示的结果:
        ———————————————————————————
        请从键盘中获取n的数值:
        6
        n! = 720
        ———————————————————————————
    ——————————————————————————————————————————
*/

 

程序代码亮点归纳: 

while (printf ("请从键盘中获取n的数值:\n"))                    //死循环,其目的是为了直至输入一个符合条件的值,
    {
            scanf ("%d",&n);                                    //在while()语句中非零(包括是一个表达式)为真,零为假
            if (n >= 0)
                break;
            else
            printf("负数没有阶乘,请重新输入新的数值\n");
    }
    printf ("n! = %ld\n",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 ");            //此时输入的n是表示第几个数
    scanf ("%d",&n);
    printf ("最后输出结果的形式是:\n");
    for (i = 0; i < n; i++)
        printf (" %d  ", fun(i));                    //此时%d后面加的是非格式控制符,如果加\n则是转行符,当每次输出一次数据时都会换一次行
    printf ("\n");                                    //当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
  ————————————————————————
*/

  

推荐阅读