borisdexter

Rekurzija

Dec 26th, 2019
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. // faktoriel(5) 1) 5 * faktoriel(4)
  4. // faktoriel(4) 2) 4 * faktoriel(3)
  5. // faktoriel(3) 3) 3 * faktoriel(2)
  6. // faktoriel(2) 4) 2 * faktoriel(1)
  7. // faktoriel(1) 5) faktoriel(1)=1
  8. // faktoriel(2) = 2 * 1 = 2
  9. // faktoriel(3) = 3 * 2 = 6
  10. // faktoriel(4) = 4 * 6 = 24
  11. // faktoriel(5) = 5 * 24 = 120
  12. /*
  13. proizvod=1;
  14. for(i=1;i<=n;i++){
  15. proizvod=proizvod*i;
  16. }
  17. */
  18.  
  19. int faktoriel(int n){
  20. if(n==1){
  21. return 1;
  22. }else{
  23. return n*faktoriel(n-1);
  24. }
  25. }
  26.  
  27. // sumaCifri(2534) 1) 4 + sumaCifri(253)
  28. // sumaCifri(253) 2) 3 + sumaCifri(25)
  29. // sumaCifri(25) 3) 5 + sumaCifri(2)
  30. // sumaCifri(2) 4) 2 + sumaCifri(0)
  31. // sumaCifri(0) 5) sumaCifri(0)=0
  32. // sumaCifri(2) 6) 2+0=2
  33. // sumaCifri(25) 7) 5+2=7
  34. // sumaCifri(253) 8) 3+7=10
  35. // sumaCifri(2534) 9) 4+10=14
  36.  
  37. int sumaCifri(int n){
  38. if(n==0){
  39. return 0;
  40. }else{
  41. return n%10 + sumaCifri(n/10);
  42. }
  43. }
  44.  
  45. int proizvodCifri(int n){
  46. if(n==0){
  47. return 1;
  48. }else{
  49. return n%10 * sumaCifri(n/10);
  50. }
  51. }
  52.  
  53. int brojCifri(int n){
  54. if(n==0){
  55. return 0;
  56. }else{
  57. return 1+brojCifri(n/10);
  58. }
  59. }
  60.  
  61. int sumaNeparni(int n){
  62. if(n==0){
  63. return 0;
  64. }else{
  65. if((n%10)%2==1){
  66. return n%10+sumaNeparni(n/10);
  67. }else{
  68. return sumaNeparni(n/10);
  69. }
  70. }
  71. }
  72.  
  73.  
  74. // so 2 promenlivi - od kraj do pocetok
  75. int brojNeparniVoNiza(int niza[],int n){
  76. if(n==0){
  77. return 0;
  78. }else{
  79. // n=2 -> niza[0] niza[1]
  80. // n=2 1) niza[1]%2==1
  81. // n=1 2) niza[0]%2==1
  82. // n=0 3) niza[-1]%2==1
  83. // n=-1 END
  84. if(niza[n-1]%2==1){
  85. return 1+brojNeparniVoNiza(niza,n-1);
  86. }else{
  87. return brojNeparniVoNiza(niza,n-1);
  88. }
  89. }
  90. }
  91. // so 3 promenlivi - od pocetok do kraj
  92. int brojNeparniVoNiza(int niza[],int n,int i){
  93. if(i==n){
  94. return 0;
  95. }else{
  96. if(niza[i]%2==1){
  97. return 1+brojNeparniVoNiza(niza,n,i+1);
  98. }else{
  99. return brojNeparniVoNiza(niza,n,i+1);
  100. }
  101. }
  102. }
  103.  
  104.  
  105. void printNiza(int niza[],int n,int i){
  106. if(i==n){
  107. printf("\n");
  108. return;
  109. }else{
  110. printf("%d ",niza[i]);
  111. return printNiza(niza,n,i+1);
  112. }
  113. }
  114.  
  115. void printNizaNaopaku(int niza[],int n){
  116. if(n==0){
  117. printf("\n");
  118. return;
  119. }else{
  120. printf("%d ",niza[n-1]);
  121. return printNizaNaopaku(niza,n-1);
  122. }
  123. }
  124.  
  125.  
  126. int kolkuPatiX(int niza[],int n,int x){
  127. if(n==0){
  128. return 0;
  129. }else{
  130. if(niza[n-1]==x){
  131. return 1+kolkuPatiX(niza,n-1,x);
  132. }else{
  133. return kolkuPatiX(niza,n-1,x);
  134. }
  135. }
  136. }
  137.  
  138. // n=16253
  139. // sumata=53+25+62+16
  140. int posledovatelniDva(int n){
  141. if(n<10){
  142. return 0;
  143. }else{
  144. return n%100+posledovatelniDva(n/10);
  145. }
  146. }
  147. // n=253245
  148. // x=25 -> 2
  149. int kolkuCifriX(int n,int x){
  150. if(n==0){
  151. return 0;
  152. }else{
  153. if(n%10==x){
  154. return 1+kolkuCifriX(n/10,x);
  155. }else{
  156. return kolkuCifriX(n/10,x);
  157. }
  158. }
  159. }
  160. // x=2 brojacOdX(x)=10
  161. // x=25 brojacOdX(x)=100
  162. // x=256 brojacOdX(x)=1000
  163. /*
  164. proizvod=1;
  165. while(x>0){
  166. x=x/10;
  167. proizvod=proizvod*10;
  168. }
  169. */
  170. // brojacOdX(25) 1) 10*brojacOdX(2)
  171. // brojacOdX(2) 2) 10*brojacOdX(0)
  172. // brojacOdX(0)=1
  173. int brojacOdX(int x){
  174. if(x==0){
  175. return 1;
  176. }else{
  177. return 10*brojacOdX(x/10);
  178. }
  179. }
  180.  
  181. // kolku pati X vo N SO POVTORUVANJE
  182. /*
  183. int kolkuPatiX(int n,int x){
  184. if(n==0){
  185. return 0;
  186. }else{
  187. // x=25 n%100
  188. // x=256 n%1000
  189. if(n%brojacOdX(x)==x){
  190. return 1+kolkuPatiX(n/10,x);
  191. }else{
  192. return kolkuPatiX(n/10,x);
  193. }
  194. }
  195. }
  196. */
  197. // kolku pati X vo N BEZ POVTORUVANJE
  198. int kolkuPatiX(int n,int x){
  199. if(n==0){
  200. return 0;
  201. }else{
  202. // x=25 n%100
  203. // x=256 n%1000
  204. // 555
  205. if(n%brojacOdX(x)==x){
  206. return 1+kolkuPatiX(n/brojacOdX(x),x);
  207. }else{
  208. return kolkuPatiX(n/10,x);
  209. }
  210. }
  211. }
  212.  
  213.  
  214. int main()
  215. {
  216. int n,i,x;
  217. scanf("%d%d",&n,&x);
  218. printf("Brojot %d se sodrzhi %d pat/i vo %d\n",x,kolkuPatiX(n,x),n);
  219. return 0;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment