递归实例

学习前提:

自己了解递归定义、多个字符串连接、sprintf()的用法和注意[*]、<< 左移符号知识、二叉树中序遍历等。

题目描述:

FJ的字符串

FJ在沙盘上写了这样一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的规律并写所有的数列AN吗?

输入格式:

仅有一个数:N ≤ 26。

输出格式:

  请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入:

3

样例输出:

ABACABA

思路详解:

这道题只是考虑输出,不用存储中间结果。其次,采用递归的做法。再则,观察可以看出输出呈现中间对称,并且和二叉树的中序遍历相似。所以采用二叉树遍历的类似函数(并且是一个返回空值的函数,可以不用返回char或者)比设置sprintf和strlen求解更加简单。

代码详解:

 1 #include<stdio.h>
 2 void p(int n)
 3 {
 4     if(n==1)
 5     {
 6         printf("A");
 7         return ;
 8     }
 9     else
10     {
11         p(n-1);
12         printf("%c",‘A‘+n-1);
13         p(n-1);
14     }
15 }
16 int main()
17 {
18     int n;
19     scanf("%d",&n);
20     p(n);
21 }

原文地址:https://www.cnblogs.com/weixq351/p/9000401.html

时间: 2024-10-11 22:01:52

递归实例的相关文章

递归实例分析

1.公园里面有200个桃子,每天吃掉一半,扔掉一个烂的,第六天剩余多少个桃子? var sl=200;i=0; for(i=0;i<6;i++){ sl=parseInt(sl/2-1); } alert(sl); 2.公园里有一堆桃子,猴子每天吃掉一半,扔掉一个烂的,第六天剩余1个桃子,问刚开始有多少个桃子 var sl=1;i=0; for(i=0;i<6;i++){ sl=(sl+1)*2; } alert(sl); 递归:特点:自己调用自己 function shuLiang(ts){

递归实例详解

C通过运行时堆栈支持递归函数的实现.递归函数就是直接或间接调用自身的函数.许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的<C语言程序设计>一书中就是从阶乘的计算开始的函数递归.导致读过这本经书的同学们,看到阶乘计算第一个想法就是递归.但是在阶乘的计算里,递归并没有提供任何优越之处.在菲波那契数列中,它的效率更是低的非常恐怖. 这里有一个简单的程序,可用于说明递归.程序的目的是把一个整数从二进制形式转换为可打印的字符形式.例如:给出一个值4267,我们需要

迭代 递归实例

在计算机编程实现中有常常两种方法:一曰迭代(iterate):二曰递归(recursion). 从"编程之美"的角度看,可以借用一句非常经典的话:"迭代是人,递归是神!"来从宏观上对二者进行把握. 从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身:迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想. 从直观上讲,递归是将大问题化为相同结构的小问题,从待求解的问题出发,一直分解到已经已知答案的最小问题为止,然后再逐级返回,从而得到大问题

递归实例,欢迎大家修改优化

问题一 昨天同事提了一个问题:有50个学生站成圆圈(学号为1~50),从1开始报数,报数为4的倍数的学生离开圆圈,剩下的继续报数直至全部离开,问最后一个离开圆圈的是哪个同学? 说这个能使用递归实现了话请大家吃饭,赶紧上代码,今天大家等着吃饭呢! 1 /** 2 * 获取最后一个离开圆圈的学生 3 * @param list 学生学号集合 4 * @param hao 即将报的数 5 * @return 6 */ 7 public static List<Integer> getNum(List

栈与递归实例

1.#include <stdio.h> void reverse(char* s){    if( (s != NULL) && (*s != '\0') )    {        reverse(s + 1);                printf(" %c", *s);    }} int main(){    reverse("12345");        printf("\n");        r

递归C++

递归C++ 一.递归简介 自己调用自己 二.递归写法 2.1 写法介绍 先写出问题的递推公式 递归部分的边界条件就是递推公式中的边界条件 递归部分的主体部分就是递推公式中的主体部分 2.2 实例 (1)题目 例如:求n!. (2)分析 递归公式为 f(n)=f(n-1)*n f(1)=1; 对应的递归: 1 /* 2 阶乘递归 3 递归公式为 f(n)=f(n-1)*n f(1)=1; 4 递归部分的边界条件就是递推公式中的边界条件 f(1)=1 5 递归部分的主体部分就是递推公式中的主体部分

递归与迭代_1 2016.4.21

迭代乃人工,递归方神通 To interate is human,to recurse,divine 一.定义 (1) 迭代 是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果 每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭代的初始值 (2) ① 程序调用自身的编程技巧称为递归( recursion) 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量

递归与迭代_2 2016.4.22

八.递归消除 按照递归的思想可使我们得以从宏观上理解和把握应用问题的实质 深入挖掘和洞悉算法过程的主要矛盾和一般性模式 并最终设计和编写出简洁优美且精确紧凑的算法 然而,递归模式并非十全十美,其众多优点的背后也隐含着某些代价 (1)空间成本 首先,从递归跟踪分析的角度不难看出,递归算法所消耗的空间量主要取决于递归深度 故较之同一算法的迭代版,递归版往往需耗费更多空间,并进而影响实际的运行速度 另外,就操作系统而言,为实现递归调用需要花费大量额外的时间以创建.维护和销毁各递归实例,这些也会令计算的

09 匿名函数、函数作用域、闭包、递归

匿名函数(lambda) 语法规则: lambda 参数:表达式 filter(lambdax: x>10, li) 匿名函数:可以赋给一个变量,重复使用. fun1 = lambda x: x * 10 print(fun1(10)) 打印结果: 100 fun = (lambda x: x * 10)(5) print(fun) 打印结果: 50 函数作用域 01外部不能访问函数内部变量: def fun1(): x = 1 print(x) 02函数内部能够访问函数外部变量: x = 12