borisdexter

Rekurzija

Dec 24th, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. // napishi funkcija
  2. // funkcija(int niza[],int n)
  3.  
  4. // n=5 -> 5*4*3*2*1
  5. // faktoriel (5) 1) n=5 return 5 * faktoriel(4) -> 5 * (4 * 3 * 2 * 1 )
  6. // faktoriel (4) 2) n=4 return 4 * faktoriel(3) -> 4 * (3 * 2 * 1)
  7. // faktoriel (3) 3) n=3 return 3 * faktoriel(2) -> 3 * (2 * 1)
  8. // faktoriel (2) 4) n=2 return 2 * faktoriel(1) -> 2 * 1
  9. // faktoriel (1) 5) n=1 return 1
  10. int faktoriel(int n){
  11. if(n==1){
  12. return 1;
  13. }else{
  14. return n*faktoriel(n-1);
  15. }
  16. }
  17. // n=235 -> 2+3+5+0
  18. // sumaCifri(235) 1) 5 + sumaCifri(23) -> sumaCifri(235) = 5+5
  19. // sumaCifri(23) 2) 3 + sumaCifri(2) -> sumaCifri(23) = 3+2
  20. // sumaCifri(2) 3) 2 + sumaCifri(0) -> sumaCifri(2) = 2+0
  21. // sumaCifri(0) 4) 0
  22. int sumaCifri(int n){
  23. if(n==0){
  24. return 0;
  25. }else{
  26. return n%10 + sumaCifri(n/10);
  27. }
  28. }
  29.  
  30. int proizvodCifri(int n){
  31. if(n==0){
  32. return 1;
  33. }else{
  34. return n%10 * proizvodCifri(n/10);
  35. }
  36. }
  37.  
  38. // brojCifri(235) 1) 1+brojCifri(23)
  39. // brojCifri(23) 2) 1+brojCifri(2)
  40. // brojCifri(2) 3) 1+brojCifri(0)
  41. // brojCifri(0) 4) brojCifri(0)=0 i posle zamenuvame nagore
  42. int brojCifri(int n){
  43. if(n==0){
  44. return 0;
  45. }else{
  46. return 1+brojCifri(n/10);
  47. }
  48. }
  49.  
  50. // n=235 -> 3+5
  51. // sumaNeparni(235) 1) 5 + sumaNeparni(23) -> 5 + 3 = 8
  52. // sumaNeparni(23) 2) 3 + sumaNeparni(2) -> sumaNeparni(23)=3
  53. // sumaNeparni(2) 3) 0
  54. // sumaNeparni(0) 4) sumaNeparni(0)=0
  55. int sumaNeparni(int n){
  56. if(n==0){
  57. return 0;
  58. }else{
  59. if(n%10%2==0){
  60. return sumaNeparni(n/10);
  61. }else{
  62. return n%10+sumaNeparni(n/10);
  63. }
  64.  
  65. }
  66. }
  67.  
  68. // niza=5 -> niza[4],niza[3]...niza[0]
  69. void printNaopaku(int niza[],int n){
  70. if(n==0){
  71. printf("%d ",niza[n]);
  72. }else{
  73. printf("%d ",niza[n]); // niza[2]
  74. return printNaopaku(niza,n-1);
  75. }
  76. }
  77. // niza[3]={2,3,4}
  78. // kolkuParni(niza,n,0) 1) 1+kolkuParni(niza,n,1)
  79. // kolkuParni(niza,n,1) 2) kolkuParni(niza,n,2)
  80. // kolkuParni(niza,n,2) 3) 1+kolkuParni(niza,n,3)
  81. // kolkuParni(niza,n,3) 4) kolkuParni(niza,n,3)=0
  82.  
  83. // proagjanje niza so 3 promenlivi
  84. int kolkuParni(int niza[],int n,int i){
  85. if(i==n){
  86. return 0;
  87. }else{
  88. if(niza[i]%2==0){
  89. return 1+kolkuParni(niza,n,i+1);
  90. }else{
  91. return kolkuParni(niza,n,i+1);
  92. }
  93. }
  94. }
  95.  
  96. // proagjanje niza so 2 promenlivi
  97. int kolkuParni(int niza[],int n){
  98. if(n==-1){
  99. return 0;
  100. }else{
  101. if(niza[n]%2==0){
  102. return 1+kolkuParni(niza,n-1);
  103. }else{
  104. return kolkuParni(niza,n-1);
  105. }
  106. }
  107. }
  108. // niza[5] n=5 -> niza[5]='\0' posleden chlen e niza[4] t.e. n-1
  109. int kolkuPatiX(int niza[],int n, int x){
  110. if(n==-1){
  111. return 0;
  112. }else{
  113. if(niza[n]==x){
  114. return 1+kolkuPatiX(niza,n-1,x);
  115. }else{
  116. return kolkuPatiX(niza,n-1,x);
  117. }
  118. }
  119. }
  120. // n=314145 -> n%100==x ako e, togash n=n/10
  121. // x=14
  122. // 10*10=100
  123.  
  124. // n=314145 -> n%1000==x
  125. // x=141
  126. // 10*10*10=1000
  127.  
  128. // cifriX(14) 1) 10*10
  129. // cifriX(1) 2) 10
  130. // cifriX(0) 3) 1
  131. int cifriX(int x){
  132. if(x==0){
  133. return 1;
  134. }else{
  135. return 10*cifriX(x/10);
  136. }
  137. }
  138.  
  139. // so povtoruvanje
  140. /*
  141. int kolkuPatiX(int n,int x){
  142. if(n==0){
  143. return 0;
  144. }else{
  145. if(n%cifriX(x)==x){
  146. return 1+kolkuPatiX(n/10,x);
  147. }else{
  148. return kolkuPatiX(n/10,x);
  149. }
  150. }
  151. }
  152. */
  153.  
  154. // bez povtoruvanje
  155. int kolkuPatiX(int n,int x){
  156. if(n==0){
  157. return 0;
  158. }else{
  159. if(n%cifriX(x)==x){
  160. return 1+kolkuPatiX(n/cifriX(x),x);
  161. }else{
  162. return kolkuPatiX(n/10,x);
  163. }
  164. }
  165. }
  166. int main(){
  167. int n,i,x;
  168. scanf("%d%d",&n,&x);
  169. printf("Brojot %d go ima %d pati vo brojot %d\n",x,kolkuPatiX(n,x),n);
  170. return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment