20160329 -- for/while/do while/goto/ 递归

任何算法都是使用for/while/do while/goto/ 递归来完成的。

把任何的循环都使用递归来改写,增强算法的逻辑能力。

把一个整数转换为字符串,二分查找,数据分离。

整数字符串的转换:

#include <stdio.h>
#include <stdlib.h>

int toNum(char * str)
{
    char * istr = str;
    int num = 0;
    while(*str != ‘\0‘)
    {
        if ((*str)<‘0‘||(*str)>‘9‘)
        {
            return -1;
         }
         *str++;
         num++
     }
     printf("%d", num);
     int lastres = 0;
     for (int i = 0; i < num; i++)
     {
         lastres *= 10;
         int wei = istr[i] - 48;
         lastres += wei;
         printf("\n wei = %d", wei);
     }
     return lastres;

}

void tostr(int num, char * str)
{
    int wei = 0;
    for(int inum = num; inum; inum/=10)
    {
        wei++;
    }
    
    for(int i = wei - 1; num; num/=10, i--)
    {
        str[i] = num % 10 + 48;
    }
}

void main()
{
    int num = 1234567;
    char str[10] = {0};
    tostr(num, str);
    printf("%s", str);
    
    getchar();
}

递归:

#define _CRT_SECURE_NO_WARNINGS  //关闭安全检查

#include <stdio.h>
#include <stdlib.h>

double go(int n)
{
    if ( n == 1)
    {
        return 1.0;
    }
    else if (n == 2)
    {
        return 2.0;
    }
    else
    {
        return go(n-1)+go(n-2);
    }
}

使用while,do while, for, 递归,分别写出一个二分查找法的算法。

递归判断一个数组是否递减

使用for, while, do while, goto, 递归实现整数转换为字符串。

递归实现10进制转8进制

递归实现字符串转整数(包含正负),字符串与double互换。

时间: 2024-10-14 22:31:11

20160329 -- for/while/do while/goto/ 递归的相关文章

由易到难学习递归的精华

下面是收集的一些递归实现的小算法,勤加练习,相信每一个人都能对简单的递归驾驭自如! 从1加到n的一种递归的简洁写法 int AddFrom1ToN_Recursive(int n) { return n<=0 ? 0 : n+AddFrom1ToN_Recursive(n-1); } 求2进制,8进制,16进制的递归写法,原理相同! void go2(int nNum) { if (nNum == 0) return; else { go2(nNum / 2); printf("%d&qu

递归神经网络的不可思议的有效性 [ 译 / 转 ]

递归神经网络(Recurrent Neural Networks,RNNs)就像一种神奇的魔法.我至今仍对于我第一次训练递归网络记忆犹新.那个网络是被用于生成图像说明(Image Captioning)的.仅仅进行了几十分钟的训练,我的第一个模型(这个模型中相当一部分超参数都是我随意选取的)就开始能给图片生成看起来非常不错的描述,而这些描述基本上能称得上是有意义的.有时结果的质量和模型复杂度之间的关联性完全超出你的预期,而我的第一次实验就是一个例子.为什么当时这些训练结果看起来如此惊人?是因为大

不用循环,不用递归,从1打印到100

如果不用循环.递归.goto,如何才能用 C++ 从 1 打印到 100 ? 看到这样一篇文章.上面有很多种解法,下面介绍几个好理解一点的: 第一种:在代码中执行系统指令 #include <stdlib.h> int main() {   return system("seq 1 100"); } 第二种:利用信号捕捉 #include <stdio.h> #include <stdlib.h>   #include <unistd.h>

求LR(0)文法的规范族集和ACTION表、GOTO表的构造算法

原理 数据结构 1 // GO 2 private static Map<Map<Integer,String>,Integer> GO 3 = new HashMap<Map<Integer,String>,Integer>(); 4 5 // 规范族集 C 6 private static Map<Integer,Map<String,List<String>>> C 7 = new HashMap<Intege

汇编语言学习系列 递归实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位). #include<stdio.h> int refact(int n){ if(n == 1) return 1; else return n * refact(n - 1); } int main(){ int a = 4; printf("%d\n", refact(a)); return 0; } 无论对于递归实现还是循环实现,汇编都是将转换为跳转语句实现.可以把上面的代码转换为 refa

马踏棋盘算法递归+回溯法实现 C语言

r为矩阵的行,c为矩阵的列 将结果输出到当前目录下的results.txt(需要提前建好). 结果将给出:1.是否存在路径使马可以按要求走遍所有的方格: 2.解的总数: 3.程序执行的时间: #include<stdio.h> #include <stdlib.h> #include <time.h> #define r 2 #define c 4 int flag[r][c]={0};//存放马跳路径的二维数组 int arr[r][c]={0}; int x[8]=

打印完整的递归调用栈

之前在写0-1背包问题的递归解法时,想要弄出完整的递归栈.尝试了使用debug工具手工追踪并画出调用栈,发现太麻烦了,又试了一下使用visual studio的code map功能,发现对于递归,它只会显示递归函数不断调用自己,并不会自动展开成为树的形式.所以我就使用了最简陋的办法,就是自己写了一个类,依赖C++的constructor和destructor来自动将栈输入到一个vector中,并且在main函数结束的地方添加一个语句将其内容输出到文件中. 这里使用了一些C++11的特性,我使用m

能模仿韩寒小四写作的神奇递归神经网络

作者:寒小阳 && 龙心尘 时间:2016年4月 出处: http://blog.csdn.net/han_xiaoyang/article/details/51253274 http://blog.csdn.net/longxinchen_ml/article/details/51253526 声明:版权所有,转载请联系作者并注明出处 特别鸣谢:北京大学焦剑博士对Recurrent Neural Networks Tutorial part1一文的翻译和部分内容提供 1.引言 在离人工智

Java中的递归调用

Java中不合理的使用递归调用,可能会导致栈内存溢出,这点是需要注意的. java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法的运行状态. 也就是我们常说的方法栈.最后一个为当前运行的栈帧. 那么每一次方法调用会为新调用方法的生成一个栈帧,保存当前方法的栈帧状态,栈帧上下文切换,切换到最新的方法栈帧. 在递归和循环之间选择时,应该优先选择的是循环而非递归,特别是要避免深度的递归. 关于递归还需要了解的是尾递归调用,尾递归调用是可以被进行优化的. 尾调用指的是一个方法或