ปัญหา
คำนวณค่าของ x n โดยที่ทั้ง x และ n เป็นอินพุตที่กำหนดโดยผู้ใช้ขณะรันไทม์
วิธีแก้ปัญหา
วิธีแก้ปัญหาในการสร้างค่าของ x กำลัง n โดยใช้ฟังก์ชันแบบเรียกซ้ำในภาษาซีมีดังต่อไปนี้ -
ตรรกะในการค้นหา x n ถูกกล่าวถึงด้านล่าง −
//Calling function: Xpow=power(x,n); //Called function: if (n==1) return(x); else if ( n%2 == 0) return (pow(power(x,n/2),2)); /*if n is even*/ else return (x*power(x, n-1));
อัลกอริทึม
อ้างถึงอัลกอริทึมที่ระบุด้านล่างเพื่อสร้างค่าของ x กำลัง n โดยใช้ฟังก์ชันแบบเรียกซ้ำ
ขั้นตอนที่ 1 − อ่านตัวแปร int แบบยาว
ขั้นตอนที่ 2 − ประกาศฟังก์ชันต้นแบบ
ขั้นตอนที่ 3 − ฟังก์ชันการโทร
Xpown=power(x,n) goto step 5
ขั้นตอนที่ 4 − พิมพ์ xpown
ขั้นตอนที่ 5 − เรียกว่าฟังก์ชัน
ขั้นตอนที่ 5.1 − ถ้า (n==1)
ขั้นตอนที่ 5.1.1 − ผลตอบแทน(x)
ขั้นตอนที่ 5.2 − อื่น ๆ ถ้า (n%2 ==0)
ขั้นตอนที่ 5.2.1 − ย้อนกลับ (ธาร(อำนาจ(x,n/2),2)); /*ถ้า n เป็นคู่*/
ขั้นตอนที่ 5.3 − อื่น ๆ
ขั้นตอนที่ 5.3.1 − ผลตอบแทน (x*กำลัง (x, n-1)); /* ถ้า n เป็นเลขคี่*/
โปรแกรม
ต่อไปนี้เป็นโปรแกรม C เพื่อ สร้างค่าของ x กำลัง n โดยใช้ฟังก์ชันแบบเรียกซ้ำ −
#include <stdio.h> #include <math.h> void main(){ long int x, n, xpown; long int power(int x, int n); printf("Enter the values of X and N: \n"); scanf("%ld %ld", &x, &n); xpown = power (x, n); printf("X to the power N = %ld\n",xpown); } /*Recursive function to computer the X to power N*/ long int power(int x, int n){ if (n==1) return(x); else if ( n%2 == 0) return (pow(power(x,n/2),2)); /*if n is even*/ else return (x*power(x, n-1)); /* if n is odd*/ }
ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Enter the values of X and N: 5 4 X to the power N = 625