递归和非递归实例

举报
wh555 发表于 2021/03/31 22:36:59 2021/03/31
【摘要】 并简要叙述递归和非递归的区别:递归代码写出来思路清晰,可读性强;递归需要系统堆栈,消耗的空间要比非递归大很多。如果递归深度太深,可能会导致系统奔溃。非递归效率高,执行时间只会因为循环的次数增加而增加,没什么而外开销,也不会占用额外空间。但非递归并不太容易理解,编写复杂问题时比较复杂。 n!=1*2*3* ……(n-1)n解释:一个正整数的阶乘(英语:factorial)是所有小于及等于该数的...
  1. 并简要叙述递归和非递归的区别:
  • 递归代码写出来思路清晰,可读性强;递归需要系统堆栈,消耗的空间要比非递归大很多。如果递归深度太深,可能会导致系统奔溃。
  • 非递归效率高,执行时间只会因为循环的次数增加而增加,没什么而外开销,也不会占用额外空间。但非递归并不太容易理解,编写复杂问题时比较复杂。

 

  • n!=1*2*3* ……(n-1)n
  • 解释:一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n

(未使用递归)

#include <stdio.h>

int main(){

    int n,i;   // 

    int factorial =1;

    printf("Please enter a integer:");

    scanf("%d",&n);

    if(n,0){

        printf("Erroe! 负数没有阶乘!");

    }

    else{

        for(i=1;i<=n;i++){    //

            factorial *= i;

        }

        printf("%d!= %d",n,factorial);

    }

    return 0;

}

 

(使用递归)

#include <stdio.h>

int multiplyNumbers(int n);

int multiplyNumbers(int n){

    if(n>=1){

        return n*multiplyNumbers(n-1);

    }

    else{

        return 1;

    }

}

 

int main(){

    int n;

    printf("Please enter a integer:");

    scanf("%d",&n);

    printf("%d!=%d",n,multiplyNumbers(n));

    return 0;

}

  • Fibonacci数列
  • 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

#include <stdio.h>

int main()

{

    int i, n, t1 = 0, t2 = 1, nextTerm;

    printf("输出几项: ");

    scanf("%d", &n);

    printf("斐波那契数列: ");

    for (i = 1; i <= n; ++i)

    {

        printf("%d, ", t1);

        nextTerm = t1 + t2;

        t1 = t2;

        t2 = nextTerm;

    }

    return 0;

}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。