Advertisement
borisdexter

Rekurzija

Dec 24th, 2019
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. // 5*4*3*2*1 -> 5!
  2. /*
  3. int faktoriel(int n){
  4. int i,proizvod=1;
  5. for(i=1;i<=n;i++){
  6. // i=1 -> proizvod=1
  7. // i=2 -> 2
  8. // i=3 -> 6
  9. // i=n-1
  10. proizvod=proizvod*i;
  11. }
  12. return proizvod;
  13. }
  14. */
  15.  
  16. int faktoriel(int n){
  17. if(n==1){
  18. return 1;
  19. }else{
  20. return n*faktoriel(n-1);
  21. }
  22. }
  23. // faktoriel(5) 1) 5 * faktoriel(4)
  24. // faktoriel(4) 2) 4 * faktoriel(3)
  25. // faktoriel(3) 3) 3 * faktoriel(2)
  26. // faktoriel(2) 4) 2 * faktoriel(1)
  27. // faktoriel(1) 5) faktoriel(1)=1
  28. // faktoriel(2) = 2 * 1 = 2
  29. // faktoriel(3) = 3 * 2 = 6
  30. // faktoriel(4) = 4 * 6 = 24
  31. // faktoriel(5) = 5 * 24 = 120
  32.  
  33. // brojac n=n/10
  34. int brojCifri(int n){
  35. if(n==0){
  36. return 0;
  37. }else{
  38. return 1+brojCifri(n/10);
  39. }
  40. }
  41. // brojCifri(2534) 1) 1+brojCifri(253)
  42. // brojCifri(253) 2) 1+brojCifri(25)
  43. // brojCifri(25) 3) 1+brojCifri(2)
  44. // brojCifri(2) 4) 1+brojCifri(0)
  45. // brojCifri(0) 5) brojCifri(0)=0
  46. // brojCifri(2)=1+brojCifri(0)=1+0=1
  47. // brojCifri(25)=1+1=2
  48. // brojCifri(253)=1+2=3
  49. // brojCifri(2534)=1+3=4
  50.  
  51. // 2534 -> 4 + sumaCifri(253)
  52. // 253 -> 3 + sumaCifri(25)
  53. // 25 -> 5 + sumaCifri(2)
  54. // 2 -> 2 + sumaCifri(0)
  55.  
  56. int sumaCifri(int n){
  57. if(n==0){
  58. return 0;
  59. }else{
  60. return n%10 + sumaCifri(n/10);
  61. }
  62. }
  63.  
  64. // 2534 -> 5+3
  65. int sumaNeparniCifri(int n){
  66. if(n==0){
  67. return 0;
  68. }else{
  69. // 2534
  70. if((n%10)%2==1){
  71. return n%10 + sumaNeparniCifri(n/10);
  72. }else{
  73. return sumaNeparniCifri(n/10);
  74. }
  75. }
  76. }
  77.  
  78. int brojNeparniCifri(int n){
  79. if(n==0){
  80. return 0;
  81. }else{
  82. // 2534
  83. if((n%10)%2==1){
  84. return 1 + brojNeparniCifri(n/10);
  85. }else{
  86. return brojNeparniCifri(n/10);
  87. }
  88. }
  89. }
  90.  
  91. // so dve promenlivi - od kraj do pocetok
  92. // n=5 -> niza[5]={1,2,3,4,5} niza[4]=5
  93. int neparniNiza(int niza[],int n){
  94. if(n==-1){
  95. // niza[0]
  96. return 0;
  97. }else{
  98. if(niza[n]%2==0){
  99. return neparniNiza(niza,n-1);
  100. }else{
  101. return 1 + neparniNiza(niza,n-1);
  102. }
  103. }
  104. }
  105. // so tri promenlivi - pocnuvame od pocetok ideme do n preku i
  106. int neparniNiza(int niza[],int n,int i){
  107. if(i==n){
  108. return 0;
  109. }else{
  110. if(niza[i]%2==0){
  111. return neparniNiza(niza,n,i+1);
  112. }else{
  113. return 1 + neparniNiza(niza,n,i+1);
  114. }
  115. }
  116. }
  117.  
  118.  
  119.  
  120. void printNaopaku(int niza[],int n){
  121. if(n==0){
  122. printf("\n");
  123. }else{
  124. printf("%d ",niza[n-1]);
  125. return printNaopaku(niza,n-1);
  126. }
  127. }
  128.  
  129. int kolkuPatiX(int niza[],int n,int x){
  130. if(n==-1){
  131. return 0;
  132. }else{
  133. if(niza[n]==x){
  134. return 1+kolkuPatiX(niza,n-1,x);
  135. }else{
  136. return kolkuPatiX(niza,n-1,x);
  137. }
  138. }
  139. }
  140. // n=2534 x=2 -> 2
  141. int kolkuPatiX(int n,int x){
  142. if(n==0){
  143. return 0;
  144. }else{
  145. if(n%10==x){
  146. return 1+kolkuPatiX(n/10,x);
  147. }else{
  148. return kolkuPatiX(n/10,x);
  149. }
  150. }
  151. }
  152.  
  153. // n=253224 x=2 -> 2+2+2=6
  154. int sumaX(int n,int x){
  155. if(n==0){
  156. return 0;
  157. }else{
  158. if(n%10==x){
  159. return x+sumaX(n/10,x);
  160. }else{
  161. return sumaX(n/10,x);
  162. }
  163. }
  164. }
  165. /*
  166. proizvod=1;
  167. while(x>0){
  168. proizvod=proizvod*10;
  169. x=x/10;
  170. }
  171. */
  172.  
  173. int cifriX(int x){
  174. if(x==0){
  175. return 1;
  176. }else{
  177. return 10*cifriX(x/10);
  178. }
  179. }
  180. // proizvod=1000
  181. // n=25425325 x=25 -> 2 n%100
  182. // n=255553 x=555 -> 2 n%1000
  183. // x=1234 -> n%10000
  184.  
  185. // so povtoruvanje na brojot
  186. /*
  187. int kolkuPatiBrojX(int n,int x){
  188. if(n==0){
  189. return 0;
  190. }else{
  191. if(n%cifriX(x)==x){
  192. // ima povtoruvanje znaci kratime samo 1 cifra
  193. return 1+kolkuPatiBrojX(n/10,x);
  194. }else{
  195. return kolkuPatiBrojX(n/10,x);
  196. }
  197. }
  198. }
  199. */
  200. // bez povtoruvanje
  201. int kolkuPatiBrojX(int n,int x){
  202. if(n==0){
  203. return 0;
  204. }else{
  205. if(n%cifriX(x)==x){
  206. // bez povtoruvanje na broj
  207. return 1+kolkuPatiBrojX(n/cifriX(x),x);
  208. }else{
  209. return kolkuPatiBrojX(n/10,x);
  210. }
  211. }
  212. }
  213.  
  214. // 254 -> 452
  215. // 1) 4
  216. // 2) 45
  217. // 3) 452
  218. int obraten(int x){
  219. if(x==0){
  220. return 0;
  221. }else{
  222. return x%10 + 10*obraten(x/10);
  223. }
  224. }
  225.  
  226. // 442 -> 1
  227. // 123
  228.  
  229. // 12345 -> 2
  230. // 1234
  231. int kolkuParniNaParniPozicii(int x){
  232. if(x<10){
  233. return 0;
  234. }else{
  235. if((x/10%10)%2==0){
  236. return 1+kolkuParniNaParniPozicii(x/100);
  237. }else{
  238. return kolkuParniNaParniPozicii(x/100);
  239. }
  240. }
  241. }
  242. int main(){
  243. int n,i,x;
  244. scanf("%d",&x);
  245. printf("Brojot %d obratno zapishan e %d\n",x,kolkuParniNaParniPozicii(x));
  246. return 0;
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement