做题小感(递归)

在使用递归中,要小心对于while循环的使用,因为当进行递归的同时也会进行循环,因此结果或许会出人意料。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 void func(int num)
 5 {
 6     while(num>1)
 7     {
 8         //func(num-1);
 9         printf("%c",65+num-1);
10         printf("%c",65);
11         func(--num);
12     }
13 }
14
15 int main(void)
16 {
17     int num;
18     scanf("%d",&num);
19     func(num);
20     return 0;
21 }
22 /*
23 --num    CABABA   --num变成2进行递归,同时,进入循环进行判断,所以打印两次2的值,然后,都变为1,再次分别进入循环与递归,不满足 退出
24 num--    CACA...  首先num进入,分别进入循环和递归,在递归中,num自减1,等待本次递归结束,因为num=3时恒大于1,所以递归一直未结束,造成死循环。
25 num-1 CABABAB...首先,num-1,变成2,2进入,循环,递归,变成,1,递归不满足,退出本次递归,回到上次递归,变成2,2进入循环,递归,变成1...
26
27 前:
28 --num AABAAA
29 num--   崩溃
30 num-1  BABA...*/

原文地址:https://www.cnblogs.com/Mayfly-nymph/p/8544270.html

时间: 2024-11-05 13:38:09

做题小感(递归)的相关文章

ACM做题小技巧

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 大数据输入输出时最好不要用cin.cout,防止超时. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数. printf("%I64d",a); //_

做题小技巧

正常的输入 C++: cin>> python: input() 如果用list(input())可以将输入的字符或者数字一个一个分成一个列表 按行输入 C++: getline(cin,a) python: import sys sys.stdin.readlines(): C++中想要删掉一个string中的空格号 if(!s.empty()) { while( (index = s.find(' ',index)) != string::npos) { s.erase(index,1);

做题小心得

1,   return a>b  return后除了可以跟值外,还可以跟比较(真就是返回Ttue,假的就返回False),求和表达式 2,lambda函数的返回值 可以是值   ,也可以是比较(真就是返回Ttue,假的就返回False,通常和filter过滤联合使用),求和表达式可以用  and 或者是or 3,lambda 接受参数多可以用*args, 原文地址:https://www.cnblogs.com/lxx7/p/9484147.html

ACM 刷题小技巧【转】

转载自URl-team ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 大数据输入输出时最好不要用cin.cout,防止超时. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数.

poj水题-1579 将递归记录会变快

短平快递归肯定卡死,这里需要了解一个情况. 1.递归是否在很多情况再做重复工作? 2.由递归生成的“大面积数据”是否是由“小范围数据”组合而来? 如果都回答“是”.就强烈推荐“记笔记方式”.如果有笔记记录,那么查笔记,否则递归. #include <stdio.h> long s[21][21][21] = {0}; int w(int a,int b,int c) { if (a <= 0 || b <= 0 || c <= 0) return s[0][0][0]=1;

做题细节

1. 如果题目是枚举的话,即最后化成十分简单的形式比较小, 可以直接将各种不同状态的结果运算过程写出来,但是这并不见得比写函数要快多少 而且比较容易出错,比如下标没有更改之类,这种错误比较烦人,因为你会查看算法, 但是算法本身并没有错误,所以如果复制粘贴的话,注意不同情况的不同点,如果自己 不够细心,最好写成函数的形式(注意判断边界),以防出错.//16:35 2004-4-17 2. 在编程之后检查的第一件事就是初始化, 你的初始化也许写在循环体之外,故只能AC一组测试数据,sample. /

acm比赛刷题小技巧

ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 大数据输入输出时最好不要用cin.cout,防止超时. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数. printf("%I6

FFT/NTT做题方法与调试技巧(+提高码题效率的一些想法)

(其实本文应该写成了"结合FFT讨论的调试技巧+码题方法",语文不好一写文章就偏题QAQ) 有意见欢迎提出,有遗漏欢迎补充! FFT(快速傅里叶变换)/NTT(数论变换)是卷积运算常见而实用的优化 但是FFT/NTT的处理过程并不像暴力运算(差不多是多项式乘法)那样能够直观地反映卷积结果的实时变化. 因此在使用FFT时将会或多或少地加大调试的难度. 如果调试程序时直接跟踪变量,每步手算结果比对,不仅会耽误大量时间,而且效果可能并不理想. 直接肉眼查错效率可能也不太高. 但也正由于FFT

后缀自动机做题记录

目录 后缀自动机做题记录 sp1811 sp1812 sp10570 luogu 2463 CF873F TJOI2015 弦论 AHOI2013 差异 HEOI2016/TJOI2016 字符串 HAOI2016 找相同字符 SDOI2016 生成魔咒 ZJOI2015 诸神眷顾的幻想乡 留坑待填 广义SAM 其他 NOI原题练习 后缀自动机做题记录 来填之前的坑了...考后大概会做做有字符串的综合题吧 sp1811 lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置