循环和递归函数比较

//循环方法输出1-n个数
#include<stdio.h>
void main()
{
    int i,n=100000;
    for(i=1;i<=n;i++)
    printf("%5d",i);
}
//递归方法输出1-n个数
#include<stdio.h>
void main()
{
   int recursion(int N);
    int i,n=100000;
    recursion(n);
}
int recursion(int N)
{
    if(N)
    recursion(N-1);
    printf("%5d",N);
}

当n=10,100,1000,10000时,两个函数都能正常输出结果。递归只是比循环函数运行速度稍慢一些,而当n=100000时,循环函数依然正常运行,而递归直接罢工了。

原因:递归程序虽然清楚简洁,空间占用太大,这道题递归空间不够用,所以非正常中止,跳出来了。

所以,解决问题的方法,跟空间的利用效率有关。

哈哈,还好我本来就不太习惯递归的思想。

时间: 2024-11-09 03:07:53

循环和递归函数比较的相关文章

Python 小议2:用循环和递归函数分别求100以内的数字的加法和乘法。

今晚看了函数的递归,在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 联想到之前用循环写的关于求一百以内的数的和,目前看来基本上有三种写法: 1. for 循环 sum = 0 for i in range(1,101): sum = sum +i print sum 2 while 循环: sum =0 i =1 while i <101: sum =

递归函数详细解析

/*题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径. 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.*/ /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void fin

深入浅出 Python 函数式编程

1.函数式编程的定义与由来 如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,数据不可变,避免保存程序状态,那么就称为函数式编程(Functional Programming,简称FP,又称泛函编程). 这种风格也称声明式编程(Declarative Programming),与之相对的是指令式编程(Imperative Programming),后者中的对象会不断修改自身状态.函数式编程强调程序的执行结果比执行过程更重要,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算

iOS调试 - 基本技巧

在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退--调试在这些处理过程中是比较重要的一部 分.通过本文的学习,我们将知道在程序中,可以使用的大多数重要调试功能,并如何利用这些调试功能来帮助你以更少的时间解决bug. 本文将介绍如下内容: 使用控制台检查程序的状态 进行日志记录,并熟练的驾驭NSLog 利用对象的生命周期跟踪内存的使用 使用控制台进行检查 在进行调试程序的时候,可能Xcode底部的小黑框会是你最好的朋友.它能输出日志信息,错误信

Xcode断点调试技巧

本文转载自破船 在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退——调试在这些处理过程中是比较重要的一部分.通过本文的学习,我们将知道在程序中,可以使用的大多数重要调试功能,并如何利用这些调试功能来帮助你以更少的时间解决bug. 本文将介绍如下内容: 使用控制台检查程序的状态 进行日志记录,并熟练的驾驭NSLog 利用对象的生命周期跟踪内存的使用 使用控制台进行检查 在进行调试程序的时候,可能Xcode底部的小黑框会是你最好的朋友.它能输出日

[转]递归算法详解

计算机科学的新学生通常难以理解递归程序设计的概念.递归思想之所以困难,原因在于它非常像是循环推理(circular reasoning).它也不是一个直观的过程:当我们指挥别人做事的时候,我们极少会递归地指挥他们. Introduction 递归算法是一种直接或者间接调用自身函数或者方法的算法.递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解.递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解.递归算法,其实说白了,就是程序的自身调用.它表现在一段程

Objective C的实用类-断点调试基础课程(五)

腾讯视频地址  Objective C的实用类-断点调试   链接:http://dwz.cn/zH7cs 使用console检查app状态 进行日志记录,并熟练的驾驭NSLog 使用对象的生命周期来跟踪内存的使用. 使用Console检查app状态 Xcode底部的小黑盒是我们调试时的好朋友,它可以输出日志信息.错误信息以及其他有用的东西来帮你跟踪错误,除了可以看到日志直接输出的信息外,我们编程过程中也可以在某些断点停留,来检查app的多个方面. 条件断点 我假定你知道Breakpoints是

xcode 代码调试与快捷键 代码块

为什么你的数组包含3个项目而不是5个?为什么你的游戏运行缓慢?这些都跟调试有关,调试是开发过程中必不可少的一部分.本文所列举了一些重要的调试功能(当然并不全面)可以帮你用更少的时间来解决bug问题. 本文内容主要包括3个方面: 使用console检查app状态 进行日志记录,并熟练的驾驭NSLog 使用对象的生命周期来跟踪内存的使用. 使用Console检查app状态 Xcode底部的小黑盒是我们调试时的好朋友,它可以输出日志信息.错误信息以及其他有用的东西来帮你跟踪错误,除了可以看到日志直接输

iOS SDK:iOS调试的技巧

iOS SDK:iOS调试的技巧 为什么你的数组包含3个项目而不是5个?为什么你的游戏运行缓慢?这些都跟调试有关,调试是开发过程中必不可少的一部分.本文所列举了一些重要的调试功能(当然并不全面)可以帮你用更少的时间来解决bug问题. 本文内容主要包括3个方面: 使用console检查app状态 进行日志记录,并熟练的驾驭NSLog 使用对象的生命周期来跟踪内存的使用. 使用Console检查app状态 Xcode底部的小黑盒是我们调试时的好朋友,它可以输出日志信息.错误信息以及其他有用的东西来帮