Function & Recursif , Parsing parameter by value dan Parsing parameter by location ( reference )

di bahasa c kita juga bisa membuat function untuk mempermudah dan menghemat tenaga untuk coding karena hanya di tulis 1x dan bisa di gunakan seterusnya contohnya fungsi seperti ini

// tipedata namafunction(Parameter (tipedata namaparameter),(tipedata namaparameter)){
//block statement
}
int functionCoba(int angka){
//Block statement
//Return namavariable atau angka
}

untuk function bisa menggunakan semua tipe data termasuk void tapi kalau void tidak dapat mengembalikan nilai dan tidak dapat menggunakan return coba kita buat function sederhana untuk menghitung selisih nilai anda dengan nilai teman

#include <stdio.h>
int hitungSelisihNilai(int nilaiSaya,int nilaiTeman){
	int selisih = nilaiSaya - nilaiTeman;
	return selisih;
}

int main(){
int nilaiSaya,nilaiTeman;
printf("masukan nilai anda : ");
scanf("%d",&nilaiSaya);
fflush(stdin);

printf("masukan nilai teman : ");
scanf("%d",&nilaiTeman);
fflush(stdin);

printf("Selisih Nilai Anda Dengan Teman : %d ",hitungSelisihNilai(nilaiSaya,nilaiTeman));
getchar();
return 0;

}

dan kemudian kita buat contoh parsing parameter with value dan parsing parameter with reference

void ubahNilaiByValue(int nilai){
	nilai = nilai + 11;
	
}

void ubahNilaiByRef(int *nilai){
	*nilai = *nilai + 22;
} 

int main(){
 //Parsing parameter by value 
 int number = 50;
 printf("Number Before : %d \n",number);
 ubahNilaiByValue(number);
 printf("Number After : %d \n",number);
 
 //Parsing parameter by refference / addres / location
 int number2 = 30;
 printf("Number2 Before : %d \n",number2);
 ubahNilaiByRef(&number2);
 printf("Number2 After : %d \n",number2);
}

Parsing parameter by value number akan tetap 50 setelah atau sebelum di masukan ke function karena function tidak mengetahui adress dari number tersebut kecuali yang menggunakan parsing parameter by reference kita memberikan “&number2” yang berarti kita memberikan adress kita maka function dapat merubah value kita tambahan ini ada contoh untuk parsing array

void printArray(int arr[] , int index){
 printf("Array ke %d Adalah %d \n",index,arr[index]);
}

int main(){
//parsing parameter array
  int numb_arr[] = {10,15,20,25,30};
  printArray(numb_arr,0); // Maka akan keluar array index ke [0] = 10
  getchar();  
  return 0;
}</code></pre>

Kemudian contoh rekrusif function yaitu function yang dapat memanggil dirinya sendiri di dalam function itu

```c
int faktorial(int angka){

	if(angka &lt;= 1)
		return 1;
	else
		return angka * faktorial(angka-1);
}

int main(){
	printf("Faktorial dari 6 : %d\n",faktorial(6));
        getchar();
        return 0;
}

 

dan lagi ada contoh rekrusif function yaitu untuk menyelesaikan fibonnaci

//fibonaci
// 1 1 2 3 5 8 13 21
int fibonaci(int angka){
	if(angka &lt;=2 )
		return 1;
	else
		fibonaci(angka-1);//1
		return fibonaci(angka-1) + fibonaci(angka-2); //4
}
int totalFibo(int angka){
		if(angka &lt;=1)
			return 1;
		else
		return fibonaci(angka)+totalFibo(angka-1); 
}

int main(){
	printf("Fibonacci dari 8 : %d\n",fibonaci(8));
	printf("Jumlah Fibonacci dari 5 : %d \n",totalFibo(4));
	getchar();
	return 0;
}