在使用递归中,要小心对于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